From a9cf203e2d4a0f94cb2ade11dfbdb903fac70d91 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Mon, 3 Jul 2006 17:38:20 +0000 Subject: Plug another unusual leak. (AD_mark_helper): Free malloc'd filename if hash_insert says that string is already in the hash table. --- src/remove.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/remove.c b/src/remove.c index f85372bb1..5de52df23 100644 --- a/src/remove.c +++ b/src/remove.c @@ -497,7 +497,7 @@ AD_pop_and_chdir (DIR **dirp, Dirstack_state *ds, char **prev_dir) /* Initialize *HT if it is NULL. Insert FILENAME into HT. */ static void -AD_mark_helper (Hash_table **ht, char const *filename) +AD_mark_helper (Hash_table **ht, char *filename) { if (*ht == NULL) { @@ -506,8 +506,15 @@ AD_mark_helper (Hash_table **ht, char const *filename) if (*ht == NULL) xalloc_die (); } - if (! hash_insert (*ht, filename)) + void *ent = hash_insert (*ht, filename); + if (ent == NULL) xalloc_die (); + else + { + if (ent != filename) + free (filename); + } + } /* Mark FILENAME (in current directory) as unremovable. */ @@ -525,7 +532,7 @@ static void AD_mark_current_as_unremovable (Dirstack_state *ds) { struct AD_ent *top = AD_stack_top (ds); - char const *curr = top_dir (ds); + char *curr = top_dir (ds); assert (1 < AD_stack_height (ds)); -- cgit v1.2.3-54-g00ecf