# HG changeset patch # User Michael Pavone # Date 1490150888 25200 # Node ID 72ea3885e7b5a9bc6676f7f4e4279df5b79d5d2c # Parent 5905593d6828804c5216aa09076c35a8f3370ccb Don't leak a ternary tree when building the menu's initial path diff -r 5905593d6828 -r 72ea3885e7b5 menu.c --- a/menu.c Tue Mar 21 00:40:25 2017 -0700 +++ b/menu.c Tue Mar 21 19:48:08 2017 -0700 @@ -177,6 +177,8 @@ tern_node *vars = tern_insert_ptr(NULL, "HOME", get_home_dir()); vars = tern_insert_ptr(vars, "EXEDIR", get_exe_dir()); menu->curpath = replace_vars(menu->curpath, vars, 1); + tern_free(vars); + } if (menu->state) { uint32_t dst = menu->latch << 16 | value; diff -r 5905593d6828 -r 72ea3885e7b5 tern.c --- a/tern.c Tue Mar 21 00:40:25 2017 -0700 +++ b/tern.c Tue Mar 21 19:48:08 2017 -0700 @@ -224,3 +224,16 @@ { return value.intval & 1 ? (tern_node *)(value.intval & ~1) : NULL; } + +void tern_free(tern_node *head) +{ + if (head->left) { + tern_free(head->left); + } + if (head->right) { + tern_free(head->right); + } + if (head->el) { + tern_free(head->straight.next); + } +} diff -r 5905593d6828 -r 72ea3885e7b5 tern.h --- a/tern.h Tue Mar 21 00:40:25 2017 -0700 +++ b/tern.h Tue Mar 21 19:48:08 2017 -0700 @@ -42,5 +42,6 @@ void tern_foreach(tern_node *head, iter_fun fun, void *data); char * tern_int_key(uint32_t key, char * buf); tern_node * tern_get_node(tern_val value); +void tern_free(tern_node *head); #endif //TERN_H_