block: stage extroot mounts in /tmp/extroot since /tmp/overlay might be in use by...
[project/ubox.git] / block.c
diff --git a/block.c b/block.c
index 5ae0fd0..e8f7d3c 100644 (file)
--- a/block.c
+++ b/block.c
@@ -663,7 +663,7 @@ static int check_extroot(char *path)
                if (!strcmp(pr->dev, fs)) {
                        struct stat s;
                        FILE *fp = NULL;
-                       char tag[32];
+                       char tag[64];
                        char uuid[32] = { 0 };
 
                        snprintf(tag, sizeof(tag), "%s/etc/.extroot-uuid", path);
@@ -697,8 +697,8 @@ static int check_extroot(char *path)
 
 static int mount_extroot(char *cfg)
 {
-       char overlay[] = "/tmp/overlay";
-       char mnt[] = "/tmp/mnt";
+       char overlay[] = "/tmp/extroot/overlay";
+       char mnt[] = "/tmp/extroot/mnt";
        char *path = mnt;
        struct blkid_struct_probe *pr;
        struct mount *m;
@@ -910,8 +910,8 @@ static int main_swapon(int argc, char **argv)
                struct stat s;
                int err;
 
-               if (stat(argv[1], &s) || !S_ISBLK(s.st_mode)) {
-                       fprintf(stderr, "%s is not a block device\n", argv[1]);
+               if (stat(argv[1], &s) || (!S_ISBLK(s.st_mode) && !S_ISREG(s.st_mode))) {
+                       fprintf(stderr, "%s is not a block device or file\n", argv[1]);
                        return -1;
                }
                err = swapon(argv[1], 0);
@@ -956,8 +956,8 @@ static int main_swapoff(int argc, char **argv)
                struct stat s;
                int err;
 
-               if (stat(argv[1], &s) || !S_ISBLK(s.st_mode)) {
-                       fprintf(stderr, "%s is not a block device\n", argv[1]);
+               if (stat(argv[1], &s) || (!S_ISBLK(s.st_mode) && !S_ISREG(s.st_mode))) {
+                       fprintf(stderr, "%s is not a block device or file\n", argv[1]);
                        return -1;
                }
                err = swapoff(argv[1]);