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_