mirror of https://github.com/xqemu/xqemu.git
vl: allow full-blown QemuOpts syntax for -global
-global does not work for drivers that have a dot in their name, such as cfi.pflash01. This is just a parsing limitation, because such globals can be declared easily inside a -readconfig file. To allow this usage, support the full QemuOpts key/value syntax for -global too, for example "-global driver=cfi.pflash01,property=secure,value=on". The two formats do not conflict, because the key/value syntax does not have a period before the first equal sign. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
f71e42a5c9
commit
3751d7c43f
|
@ -822,15 +822,19 @@ int qemu_global_option(const char *str)
|
||||||
QemuOpts *opts;
|
QemuOpts *opts;
|
||||||
int rc, offset;
|
int rc, offset;
|
||||||
|
|
||||||
rc = sscanf(str, "%63[^.].%63[^=]%n", driver, property, &offset);
|
rc = sscanf(str, "%63[^.=].%63[^=]%n", driver, property, &offset);
|
||||||
if (rc < 2 || str[offset] != '=') {
|
if (rc == 2 && str[offset] == '=') {
|
||||||
error_report("can't parse: \"%s\"", str);
|
opts = qemu_opts_create(&qemu_global_opts, NULL, 0, &error_abort);
|
||||||
|
qemu_opt_set(opts, "driver", driver, &error_abort);
|
||||||
|
qemu_opt_set(opts, "property", property, &error_abort);
|
||||||
|
qemu_opt_set(opts, "value", str + offset + 1, &error_abort);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
opts = qemu_opts_parse(&qemu_global_opts, str, false);
|
||||||
|
if (!opts) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
opts = qemu_opts_create(&qemu_global_opts, NULL, 0, &error_abort);
|
|
||||||
qemu_opt_set(opts, "driver", driver, &error_abort);
|
|
||||||
qemu_opt_set(opts, "property", property, &error_abort);
|
|
||||||
qemu_opt_set(opts, "value", str + offset + 1, &error_abort);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -171,11 +171,13 @@ Set parameter @var{arg} for item @var{id} of type @var{group}\n"
|
||||||
ETEXI
|
ETEXI
|
||||||
|
|
||||||
DEF("global", HAS_ARG, QEMU_OPTION_global,
|
DEF("global", HAS_ARG, QEMU_OPTION_global,
|
||||||
"-global driver.prop=value\n"
|
"-global driver.property=value\n"
|
||||||
|
"-global driver=driver,property=property,value=value\n"
|
||||||
" set a global default for a driver property\n",
|
" set a global default for a driver property\n",
|
||||||
QEMU_ARCH_ALL)
|
QEMU_ARCH_ALL)
|
||||||
STEXI
|
STEXI
|
||||||
@item -global @var{driver}.@var{prop}=@var{value}
|
@item -global @var{driver}.@var{prop}=@var{value}
|
||||||
|
@itemx -global driver=@var{driver},property=@var{property},value=@var{value}
|
||||||
@findex -global
|
@findex -global
|
||||||
Set default value of @var{driver}'s property @var{prop} to @var{value}, e.g.:
|
Set default value of @var{driver}'s property @var{prop} to @var{value}, e.g.:
|
||||||
|
|
||||||
|
@ -186,6 +188,9 @@ qemu-system-i386 -global ide-drive.physical_block_size=4096 -drive file=file,if=
|
||||||
In particular, you can use this to set driver properties for devices which are
|
In particular, you can use this to set driver properties for devices which are
|
||||||
created automatically by the machine model. To create a device which is not
|
created automatically by the machine model. To create a device which is not
|
||||||
created automatically and set properties on it, use -@option{device}.
|
created automatically and set properties on it, use -@option{device}.
|
||||||
|
|
||||||
|
The two syntaxes are equivalent. The longer one works for drivers whose name
|
||||||
|
contains a dot.
|
||||||
ETEXI
|
ETEXI
|
||||||
|
|
||||||
DEF("boot", HAS_ARG, QEMU_OPTION_boot,
|
DEF("boot", HAS_ARG, QEMU_OPTION_boot,
|
||||||
|
|
Loading…
Reference in New Issue