projects
/
project
/
fstools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
block: support finding root device by mount point
[project/fstools.git]
/
jffs2reset.c
diff --git
a/jffs2reset.c
b/jffs2reset.c
index
122e03b
..
13edf1e
100644
(file)
--- a/
jffs2reset.c
+++ b/
jffs2reset.c
@@
-28,25
+28,25
@@
static int
handle_rmdir(const char *dir)
{
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;
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;
rmdir(dir);
return 0;
@@
-84,7
+84,7
@@
jffs2_reset(int argc, char **argv)
return -1;
}
return -1;
}
- mp = find_mount_point(v->blk,
"jffs2"
);
+ mp = find_mount_point(v->blk,
1
);
if (mp) {
fprintf(stderr, "%s is mounted as %s, only erasing files\n", v->blk, mp);
foreachdir(mp, handle_rmdir);
if (mp) {
fprintf(stderr, "%s is mounted as %s, only erasing files\n", v->blk, mp);
foreachdir(mp, handle_rmdir);