overlay: create a common function for deleting all overlay data (optionally excluding...
[project/fstools.git] / jffs2reset.c
index 13edf1e..c9d4f5f 100644 (file)
@@ -15,6 +15,8 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 
+#include <libubox/ulog.h>
+
 #include <fcntl.h>
 #include <dirent.h>
 #include <stdio.h>
 #include "libfstools/volume.h"
 
 static int
-handle_rmdir(const char *dir)
-{
-       struct dirent *dt;
-       struct stat st;
-       DIR *d;
-       int fd;
-
-       d = opendir(dir);
-       if (!d)
-               return -1;
-
-       fd = dirfd(d);
-
-       while ((dt = readdir(d)) != NULL) {
-               if (fstatat(fd, dt->d_name, &st, AT_SYMLINK_NOFOLLOW) || S_ISDIR(st.st_mode))
-                       continue;
-
-               unlinkat(fd, dt->d_name, 0);
-       }
-
-       closedir(d);
-       rmdir(dir);
-
-       return 0;
-}
-
-static int
 ask_user(int argc, char **argv)
 {
        if ((argc < 2) || strcmp(argv[1], "-y")) {
-               fprintf(stderr, "This will erase all settings and remove any installed packages. Are you sure? [N/y]\n");
+               ULOG_WARN("This will erase all settings and remove any installed packages. Are you sure? [N/y]\n");
                if (getchar() != 'y')
                        return -1;
        }
@@ -74,23 +49,23 @@ jffs2_reset(int argc, char **argv)
                return -1;
 
        if (find_filesystem("overlay")) {
-               fprintf(stderr, "overlayfs not found\n");
+               ULOG_ERR("overlayfs not supported by kernel\n");
                return -1;
        }
 
        v = volume_find("rootfs_data");
        if (!v) {
-               fprintf(stderr, "no rootfs_data was found\n");
+               ULOG_ERR("MTD partition 'rootfs_data' not found\n");
                return -1;
        }
 
        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);
+               ULOG_INFO("%s is mounted as %s, only erasing files\n", v->blk, mp);
+               overlay_delete(mp, false);
                mount(mp, "/", NULL, MS_REMOUNT, 0);
        } else {
-               fprintf(stderr, "%s is not mounted, erasing it\n", v->blk);
+               ULOG_INFO("%s is not mounted, erasing it\n", v->blk);
                volume_erase_all(v);
        }
 
@@ -110,14 +85,14 @@ jffs2_mark(int argc, char **argv)
 
        v = volume_find("rootfs_data");
        if (!v) {
-               fprintf(stderr, "no rootfs_data was found\n");
+               ULOG_ERR("MTD partition 'rootfs_data' not found\n");
                return -1;
        }
 
        fd = open(v->blk, O_WRONLY);
-       fprintf(stderr, "%s - marking with deadc0de\n", v->blk);
+       ULOG_INFO("%s - marking with deadc0de\n", v->blk);
        if (!fd) {
-               fprintf(stderr, "opening %s failed\n", v->blk);
+               ULOG_ERR("opening %s failed\n", v->blk);
                return -1;
        }
 
@@ -125,7 +100,7 @@ jffs2_mark(int argc, char **argv)
        close(fd);
 
        if (sz != 4) {
-               fprintf(stderr, "writing %s failed: %s\n", v->blk, strerror(errno));
+               ULOG_ERR("writing %s failed: %s\n", v->blk, strerror(errno));
                return -1;
        }