mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 07:13:54 -06:00
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>
This commit is contained in:
parent
f3c6a169a3
commit
99519f0a77
7 changed files with 83 additions and 61 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue