Mercurial > repos > blastem
changeset 1293:72ea3885e7b5
Don't leak a ternary tree when building the menu's initial path
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 21 Mar 2017 19:48:08 -0700 |
parents | 5905593d6828 |
children | a719e2c98b54 |
files | menu.c tern.c tern.h |
diffstat | 3 files changed, 16 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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;
--- 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); + } +}
--- 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_