X-Git-Url: http://git.archive.openwrt.org/?p=project%2Ffstools.git;a=blobdiff_plain;f=block.c;h=ef5866542e71350fd10db40cab75923485359b48;hp=4c479c0c0b52760a007f04b474efcf15fd46e34f;hb=1ff0c23ce4f0fadfb24557db5c7987e9841bd6d7;hpb=87591ef472baf11b73de7e9d4b2b52d19e50d785 diff --git a/block.c b/block.c index 4c479c0..ef58665 100644 --- a/block.c +++ b/block.c @@ -274,6 +274,13 @@ static int mount_add(struct uci_section *s) if (m->target && !strcmp(m->target, "/overlay")) m->extroot = m->overlay = 1; + if (m->target && *m->target != '/') { + ULOG_WARN("ignoring mount section %s due to invalid target '%s'\n", + s->e.name, m->target); + free(m); + return -1; + } + if (m->uuid) vlist_add(&mounts, &m->node, m->uuid); else if (m->label) @@ -969,7 +976,7 @@ static int check_extroot(char *path) char devpath[32]; #ifdef UBIFS_EXTROOT - if (find_block_mtd("rootfs", devpath, sizeof(devpath))) { + if (find_block_mtd("\"rootfs\"", devpath, sizeof(devpath))) { int err = -1; libubi_t libubi; @@ -980,7 +987,7 @@ static int check_extroot(char *path) return -1; } #else - if (find_block_mtd("rootfs", devpath, sizeof(devpath))) { + if (find_block_mtd("\"rootfs\"", devpath, sizeof(devpath))) { if (find_root_dev(devpath, sizeof(devpath))) { ULOG_ERR("extroot: unable to determine root device\n"); return -1; @@ -1020,10 +1027,12 @@ static int check_extroot(char *path) return -1; } - fgets(uuid, sizeof(uuid), fp); + if (!fgets(uuid, sizeof(uuid), fp)) + ULOG_ERR("extroot: failed to read UUID from %s: %d (%s)\n", + tag, errno, strerror(errno)); fclose(fp); - if (!strcasecmp(uuid, pr->uuid)) + if (*uuid || !strcasecmp(uuid, pr->uuid)) return 0; ULOG_ERR("extroot: UUID mismatch (root: %s, %s: %s)\n", @@ -1092,7 +1101,8 @@ static int mount_extroot(char *cfg) if (check_fs) check_filesystem(pr); - err = mount(pr->dev, path, pr->id->name, 0, (m->options) ? (m->options) : ("")); + err = mount(pr->dev, path, pr->id->name, m->flags, + (m->options) ? (m->options) : ("")); if (err) { ULOG_ERR("extroot: mounting %s (%s) on %s failed: %d (%s)\n", @@ -1140,7 +1150,7 @@ static int main_extroot(int argc, char **argv) */ /* Start with looking for MTD partition */ - find_block_mtd("rootfs_data", blkdev_path, sizeof(blkdev_path)); + find_block_mtd("\"rootfs_data\"", blkdev_path, sizeof(blkdev_path)); if (blkdev_path[0]) { pr = find_block_info(NULL, NULL, blkdev_path); if (pr && !strcmp(pr->id->name, "jffs2")) { @@ -1302,7 +1312,7 @@ static int main_swapon(int argc, char **argv) return -1; } while (getline(&lineptr, &s, fp) > 0) - printf(lineptr); + printf("%s", lineptr); if (lineptr) free(lineptr); fclose(fp); @@ -1360,18 +1370,18 @@ static int main_swapoff(int argc, char **argv) ULOG_ERR("failed to open /proc/swaps\n"); return -1; } - fgets(line, sizeof(line), fp); - while (fgets(line, sizeof(line), fp)) { - char *end = strchr(line, ' '); - int err; + if (fgets(line, sizeof(line), fp)) + while (fgets(line, sizeof(line), fp)) { + char *end = strchr(line, ' '); + int err; - if (!end) - continue; - *end = '\0'; - err = swapoff(line); - if (err) - ULOG_ERR("failed to swapoff %s (%d)\n", line, err); - } + if (!end) + continue; + *end = '\0'; + err = swapoff(line); + if (err) + ULOG_ERR("failed to swapoff %s (%d)\n", line, err); + } fclose(fp); } else { struct stat s; @@ -1424,6 +1434,14 @@ int main(int argc, char **argv) if (!strcmp(argv[1], "umount")) return main_umount(argc, argv); + + if (!strcmp(argv[1], "remount")) { + int ret = main_umount(argc, argv); + + if (!ret) + ret = main_mount(argc, argv); + return ret; + } } ULOG_ERR("Usage: block \n");