diff options
author | Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> | 2011-12-14 13:48:59 +0530 |
---|---|---|
committer | Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> | 2012-01-04 19:51:28 +0530 |
commit | 99519f0a776797db8fbdbf828240333e5181a612 (patch) | |
tree | 60dea3adf91a2f3317ab05be685bcaee7b5c46fd /fsdev/qemu-fsdev.c | |
parent | f3c6a169a39d188e98c17a0a0ebfa7f85e5aafdd (diff) |
hw/9pfs: Move opt validation to FsDriver callback
This remove all conditional code from common code path and
make opt validation a FSDriver callback.
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Diffstat (limited to 'fsdev/qemu-fsdev.c')
-rw-r--r-- | fsdev/qemu-fsdev.c | 44 |
1 files changed, 6 insertions, 38 deletions
diff --git a/fsdev/qemu-fsdev.c b/fsdev/qemu-fsdev.c index 6684f7ea90..00f48ab44c 100644 --- a/fsdev/qemu-fsdev.c +++ b/fsdev/qemu-fsdev.c @@ -31,12 +31,10 @@ static FsDriverTable FsDrivers[] = { int qemu_fsdev_add(QemuOpts *opts) { - struct FsDriverListEntry *fsle; int i; + struct FsDriverListEntry *fsle; const char *fsdev_id = qemu_opts_id(opts); const char *fsdriver = qemu_opt_get(opts, "fsdriver"); - const char *path = qemu_opt_get(opts, "path"); - const char *sec_model = qemu_opt_get(opts, "security_model"); const char *writeout = qemu_opt_get(opts, "writeout"); bool ro = qemu_opt_get_bool(opts, "readonly", 0); @@ -61,29 +59,9 @@ int qemu_fsdev_add(QemuOpts *opts) return -1; } - if (!strcmp(fsdriver, "local") && !sec_model) { - fprintf(stderr, "security model not specified, " - "local fs needs security model\nvalid options are:" - "\tsecurity_model=[passthrough|mapped|none]\n"); - return -1; - } - - if (strcmp(fsdriver, "local") && sec_model) { - fprintf(stderr, "only local fs driver needs security model\n"); - return -1; - } - - if (!path) { - fprintf(stderr, "fsdev: No path specified.\n"); - return -1; - } - - fsle = g_malloc(sizeof(*fsle)); - + fsle = g_malloc0(sizeof(*fsle)); fsle->fse.fsdev_id = g_strdup(fsdev_id); - fsle->fse.path = g_strdup(path); fsle->fse.ops = FsDrivers[i].ops; - fsle->fse.export_flags = 0; if (writeout) { if (!strcmp(writeout, "immediate")) { fsle->fse.export_flags |= V9FS_IMMEDIATE_WRITEOUT; @@ -95,22 +73,12 @@ int qemu_fsdev_add(QemuOpts *opts) fsle->fse.export_flags &= ~V9FS_RDONLY; } - if (strcmp(fsdriver, "local")) { - goto done; + if (fsle->fse.ops->parse_opts) { + if (fsle->fse.ops->parse_opts(opts, &fsle->fse)) { + return -1; + } } - if (!strcmp(sec_model, "passthrough")) { - fsle->fse.export_flags |= V9FS_SM_PASSTHROUGH; - } else if (!strcmp(sec_model, "mapped")) { - fsle->fse.export_flags |= V9FS_SM_MAPPED; - } else if (!strcmp(sec_model, "none")) { - fsle->fse.export_flags |= V9FS_SM_NONE; - } else { - fprintf(stderr, "Invalid security model %s specified, valid options are" - "\n\t [passthrough|mapped|none]\n", sec_model); - return -1; - } -done: QTAILQ_INSERT_TAIL(&fsdriver_entries, fsle, next); return 0; } |