free struct dirent **namelist

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>
This commit is contained in:
Clement Calmels 2010-01-18 23:08:12 +01:00 committed by Daniel Lezcano
parent 226a18d671
commit 8eec72f75d

View File

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