X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fubox.git;a=blobdiff_plain;f=block.c;h=e8f7d3c2a17d7e26dab9c1b4efd5aaeead913515;hp=860a95cead30e087d2241794e15611d658b07806;hb=beadcb4dcee83fbf23c481725602ecd82470ad0d;hpb=0828095b1600fe19dc1112fbcde84a3cbfa8b2b5 diff --git a/block.c b/block.c index 860a95c..e8f7d3c 100644 --- a/block.c +++ b/block.c @@ -12,6 +12,7 @@ * GNU General Public License for more details. */ +#define _GNU_SOURCE #include #include #include @@ -512,7 +513,7 @@ static int mount_device(struct blkid_struct_probe *pr, int hotplug) if (m) { char *target = m->target; - char _target[] = "/mnt/mmcblk123"; + char _target[32]; int err = 0; if (!target) { @@ -662,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); @@ -696,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; @@ -803,7 +804,7 @@ static int main_mount(int argc, char **argv) if (config_load(NULL)) return -1; - cache_load(0); + cache_load(1); list_for_each_entry(pr, &devices, list) mount_device(pr, 0); @@ -877,11 +878,25 @@ static int main_info(int argc, char **argv) static int main_swapon(int argc, char **argv) { if (argc != 2) { - fprintf(stderr, "Usage: swapoff [-a] [DEVICE]\n\nStop swapping on DEVICE\n\n\t-a Stop swapping on all swap devices\n"); + fprintf(stderr, "Usage: swapon <-s> <-a> [DEVICE]\n\n\tStart swapping on [DEVICE]\n -a\tStart swapping on all swap devices\n -s\tShow summary\n"); return -1; } - if (!strcmp(argv[1], "-a")) { + if (!strcmp(argv[1], "-s")) { + FILE *fp = fopen("/proc/swaps", "r"); + char *lineptr = NULL; + size_t s; + + if (!fp) { + fprintf(stderr, "failed to open /proc/swaps\n"); + return -1; + } + while (getline(&lineptr, &s, fp) > 0) + printf(lineptr); + if (lineptr) + free(lineptr); + fclose(fp); + } else if (!strcmp(argv[1], "-a")) { struct blkid_struct_probe *pr; cache_load(0); @@ -895,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); @@ -912,7 +927,7 @@ static int main_swapon(int argc, char **argv) static int main_swapoff(int argc, char **argv) { if (argc != 2) { - fprintf(stderr, "Usage: swapoff [-a] [DEVICE]\n\nStop swapping on DEVICE\n\n\t-a Stop swapping on all swap devices\n"); + fprintf(stderr, "Usage: swapoff [-a] [DEVICE]\n\n\tStop swapping on DEVICE\n -a\tStop swapping on all swap devices\n"); return -1; } @@ -941,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]);