block: support finding root device by mount point
[project/fstools.git] / jffs2reset.c
index 5684872..13edf1e 100644 (file)
 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;