Free the results of scandir()
authorEthan Glasser-Camp <ethan@betacantrips.com>
Tue, 7 Feb 2012 10:05:03 +0000 (05:05 -0500)
committerDavid Bremner <bremner@debian.org>
Wed, 15 Feb 2012 03:44:30 +0000 (23:44 -0400)
scandir() returns "strings allocated via malloc(3)" which are then
"collected in array namelist which is allocated via
malloc(3)". Currently we just free the array namelist. Instead, free
all the entries of namelist, and then free namelist.

entry only points to elements of namelist, so we don't free it
separately.

notmuch-new.c

index a569a54454560ef33cb3fdad41c484658f514f35..8dbebb33e5eb3c6843dd598fb4e09c6e013c0afb 100644 (file)
@@ -559,12 +559,14 @@ add_files_recursive (notmuch_database_t *notmuch,
   DONE:
     if (next)
        talloc_free (next);
-    if (entry)
-       free (entry);
     if (dir)
        closedir (dir);
-    if (fs_entries)
+    if (fs_entries) {
+       for (i = 0; i < num_fs_entries; i++)
+           free (fs_entries[i]);
+
        free (fs_entries);
+    }
     if (db_subdirs)
        notmuch_filenames_destroy (db_subdirs);
     if (db_files)
@@ -704,10 +706,12 @@ count_files (const char *path, int *count)
     }
 
   DONE:
-    if (entry)
-       free (entry);
-    if (fs_entries)
+    if (fs_entries) {
+       for (i = 0; i < num_fs_entries; i++)
+           free (fs_entries[i]);
+
         free (fs_entries);
+    }
 }
 
 static void