block: suggest a default delay_root value of 5 seconds, since it is almost always...
[project/ubox.git] / block.c
diff --git a/block.c b/block.c
index 5ae0fd0..194eb4a 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;
@@ -717,7 +717,7 @@ static int mount_extroot(char *cfg)
        pr = find_block_info(m->uuid, m->label, NULL);
 
        if (!pr && delay_root){
-               fprintf(stderr, "extroot: is not ready yet, retrying in %ui seconds\n", delay_root);
+               fprintf(stderr, "extroot: is not ready yet, retrying in %u seconds\n", delay_root);
                sleep(delay_root);
                mkblkdev();
                cache_load(0);
@@ -835,7 +835,7 @@ static int main_detect(int argc, char **argv)
        printf("\toption\tanon_mount\t'0'\n");
        printf("\toption\tauto_swap\t'1'\n");
        printf("\toption\tauto_mount\t'1'\n");
-       printf("\toption\tdelay_root\t'0'\n");
+       printf("\toption\tdelay_root\t'5'\n");
        printf("\toption\tcheck_fs\t'0'\n\n");
        list_for_each_entry(pr, &devices, list)
                print_block_uci(pr);
@@ -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]);