X-Git-Url: http://git.archive.openwrt.org/?p=project%2Ffstools.git;a=blobdiff_plain;f=block.c;h=de8a3b7306156c570d1fa85799e66d3f74ab7a6b;hp=68cfd5a5a89207a7e03b438dff4ae0cfbd242521;hb=b0c455bfc34fc7c7ac392b18a6c09f016230216d;hpb=25a65a42bb0b2eb0b6c89b1803c703aadae8196b diff --git a/block.c b/block.c index 68cfd5a..de8a3b7 100644 --- a/block.c +++ b/block.c @@ -410,14 +410,16 @@ static int config_load(char *cfg) uci_set_confdir(ctx, path); } - if (uci_load(ctx, "fstab", &pkg)) - { - char *err; - uci_get_errorstr(ctx, &err, "fstab"); - ERROR("extroot: failed to load %s/etc/config/%s\n", - cfg ? cfg : "", err); - free(err); - return -1; + if (uci_load(ctx, "fstab", &pkg)) { + uci_set_confdir(ctx, "/etc/config"); + if (uci_load(ctx, "fstab", &pkg)) { + char *err; + uci_get_errorstr(ctx, &err, "fstab"); + ERROR("extroot: failed to load %s/etc/config/%s\n", + cfg ? cfg : "", err); + free(err); + return -1; + } } vlist_update(&mounts); @@ -598,6 +600,10 @@ static void check_filesystem(struct blkid_struct_probe *pr) struct stat statbuf; char *e2fsck = "/usr/sbin/e2fsck"; + /* UBIFS does not need stuff like fsck */ + if (!strncmp(pr->id->name, "ubifs", 5)) + return; + if (strncmp(pr->id->name, "ext", 3)) { ERROR("check_filesystem: %s is not supported\n", pr->id->name); return; @@ -907,6 +913,10 @@ static int check_extroot(char *path) char tag[64]; char uuid[64] = { 0 }; + snprintf(tag, sizeof(tag), "%s/etc", path); + if (stat(tag, &s)) + mkdir_p(tag); + snprintf(tag, sizeof(tag), "%s/etc/.extroot-uuid", path); if (stat(tag, &s)) { fp = fopen(tag, "w+"); @@ -974,7 +984,8 @@ static int mount_extroot(char *cfg) pr = find_block_info(m->uuid, m->label, m->device); } if (pr) { - if (strncmp(pr->id->name, "ext", 3)) { + if (strncmp(pr->id->name, "ext", 3) && + strncmp(pr->id->name, "ubifs", 5)) { ERROR("extroot: %s is not supported, try ext4\n", pr->id->name); return -1; }