]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
free struct dirent **namelist
authorClement Calmels <clement.calmels@fr.ibm.com>
Mon, 18 Jan 2010 22:08:12 +0000 (23:08 +0100)
committerDaniel Lezcano <dlezcano@fr.ibm.com>
Mon, 18 Jan 2010 22:08:12 +0000 (23:08 +0100)
Correct the way the struct dirent **namelist structure is freed.

Signed-off-by: Clement Calmels <clement.calmels@fr.ibm.com>
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
src/lxc/parse.c

index b3d1194ebe9bce3db403af3a40e973fd69c22fa2..78dbd6d42c1deba3ddb9eb2e828644baa16e5fde 100644 (file)
@@ -43,7 +43,7 @@ int lxc_dir_for_each(const char *name, const char *directory,
                     lxc_dir_cb callback, void *data)
 {
        struct dirent **namelist;
-       int n;
+       int n, ret = 0;
 
        n = scandir(directory, &namelist, dir_filter, alphasort);
        if (n < 0) {
@@ -52,15 +52,16 @@ int lxc_dir_for_each(const char *name, const char *directory,
        }
 
        while (n--) {
-               if (callback(name, directory, namelist[n]->d_name, data)) {
+               if (!ret &&
+                   callback(name, directory, namelist[n]->d_name, data)) {
                        ERROR("callback failed");
-                       free(namelist[n]);
-                       return -1;
+                       ret = -1;
                }
                free(namelist[n]);
        }
+       free(namelist);
 
-       return 0;
+       return ret;
 }
 
 int lxc_file_for_each_line(const char *file, lxc_file_cb callback,