#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;
}
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);
}
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;
}
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;
}