From 8eec72f75d5a035a0c5d4d2ba882c5ae9cb44a72 Mon Sep 17 00:00:00 2001 From: Clement Calmels Date: Mon, 18 Jan 2010 23:08:12 +0100 Subject: [PATCH] free struct dirent **namelist Correct the way the struct dirent **namelist structure is freed. Signed-off-by: Clement Calmels Signed-off-by: Daniel Lezcano --- src/lxc/parse.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/lxc/parse.c b/src/lxc/parse.c index b3d1194eb..78dbd6d42 100644 --- a/src/lxc/parse.c +++ b/src/lxc/parse.c @@ -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, -- 2.47.2