X-Git-Url: http://git.archive.openwrt.org/?p=project%2Ffstools.git;a=blobdiff_plain;f=jffs2reset.c;h=13edf1e2a8ec83c5cf4885310a6ef00839c54b8b;hp=56848723a0a005530188d5cc9c26d329c651dc70;hb=17fec3a09b65e09311042cff037bf97ce28ef693;hpb=cd3d4999a622af4830e4da974f4baafc085bad4d diff --git a/jffs2reset.c b/jffs2reset.c index 5684872..13edf1e 100644 --- a/jffs2reset.c +++ b/jffs2reset.c @@ -28,25 +28,25 @@ static int handle_rmdir(const char *dir) { - struct stat s; - struct dirent **namelist; - int n; - - n = scandir(dir, &namelist, NULL, NULL); + struct dirent *dt; + struct stat st; + DIR *d; + int fd; - if (n < 1) + d = opendir(dir); + if (!d) return -1; - while (n--) { - char file[256]; + fd = dirfd(d); + + while ((dt = readdir(d)) != NULL) { + if (fstatat(fd, dt->d_name, &st, AT_SYMLINK_NOFOLLOW) || S_ISDIR(st.st_mode)) + continue; - snprintf(file, sizeof(file), "%s%s", dir, namelist[n]->d_name); - if (!lstat(file, &s) && !S_ISDIR(s.st_mode)) - unlink(file); - free(namelist[n]); + unlinkat(fd, dt->d_name, 0); } - free(namelist); + closedir(d); rmdir(dir); return 0;