Plug another unusual leak.
authorJim Meyering <jim@meyering.net>
Mon, 3 Jul 2006 17:38:20 +0000 (17:38 +0000)
committerJim Meyering <jim@meyering.net>
Mon, 3 Jul 2006 17:38:20 +0000 (17:38 +0000)
(AD_mark_helper): Free malloc'd filename if hash_insert says
that string is already in the hash table.

ChangeLog
src/remove.c

index 96391a3..a716848 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2006-07-03  Jim Meyering  <jim@meyering.net>
 
+       Plug another unusual leak.
+       (AD_mark_helper): Free malloc'd filename if hash_insert says
+       that string is already in the hash table.
+
        The dev/inode of the topmost directory in each hierarchy were not
        being recorded.
        * src/remove.c (remove_cwd_entries): Don't call cycle_check here.
index f85372b..5de52df 100644 (file)
@@ -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));