diff options
author | John Crispin <blogic@openwrt.org> | 2015-08-26 03:54:46 +0200 |
---|---|---|
committer | John Crispin <blogic@openwrt.org> | 2015-08-26 05:21:38 +0200 |
commit | cc63723d886fde2cd364a545b7cb05b70721b83f (patch) | |
tree | e0f476ea057f6254b16ebd9d32157de8231d96ce /libfstools/overlay.c | |
parent | eee7814420990b0a733fbc68defa56d4d0c388a7 (diff) | |
download | fstools-cc63723d886fde2cd364a545b7cb05b70721b83f.tar.gz |
overlay: use lstat rather than stat and make sure there are no trailing spaces
with this patch even uclibc wont deleted symlinked folders
Signed-off-by: John Crispin <blogic@openwrt.org>
Diffstat (limited to 'libfstools/overlay.c')
-rw-r--r-- | libfstools/overlay.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/libfstools/overlay.c b/libfstools/overlay.c index d6c311b..7f69606 100644 --- a/libfstools/overlay.c +++ b/libfstools/overlay.c @@ -78,10 +78,16 @@ foreachdir(const char *dir, int (*cb)(const char*)) snprintf(globdir, 256, "%s/*", dir); /**/ if (!glob(globdir, GLOB_NOESCAPE | GLOB_MARK | GLOB_ONLYDIR, NULL, &gl)) - for (j = 0; j < gl.gl_pathc; j++) - if (!stat(gl.gl_pathv[j], &s) && !S_ISLNK(s.st_mode)) - foreachdir(gl.gl_pathv[j], cb); + for (j = 0; j < gl.gl_pathc; j++) { + char *dir = gl.gl_pathv[j]; + int len = strlen(gl.gl_pathv[j]); + + if (len > 1 && dir[len - 1] == '/') + dir[len - 1] = '\0'; + if (!lstat(gl.gl_pathv[j], &s) && !S_ISLNK(s.st_mode)) + foreachdir(gl.gl_pathv[j], cb); + } cb(dir); } |