Load global config files by default

A new option, -nodefconfig is introduced to prevent loading from the default
config location.  Otherwise, two configuration files will be searched for,
qemu.conf and target-<TARGET_NAME>.conf.

To ensure that the default configuration is overridden by a user specified
config, we introduce a two stage option parsing mechanism.

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Anthony Liguori 2010-01-21 10:57:58 -06:00
parent 6530a97bdd
commit 292444cb87
2 changed files with 48 additions and 0 deletions

View File

@ -1965,6 +1965,15 @@ STEXI
@item -writeconfig @var{file} @item -writeconfig @var{file}
Write device configuration to @var{file}. Write device configuration to @var{file}.
ETEXI ETEXI
DEF("nodefconfig", 0, QEMU_OPTION_nodefconfig,
"-nodefconfig\n"
" do not load default config files at startup\n")
STEXI
@item -nodefconfig
Normally QEMU loads a configuration file from @var{sysconfdir}/qemu.conf and
@var{sysconfdir}/target-@var{ARCH}.conf on startup. The @code{-nodefconfig}
option will prevent QEMU from loading these configuration files at startup.
ETEXI
HXCOMM This is the last statement. Insert new options before this line! HXCOMM This is the last statement. Insert new options before this line!
STEXI STEXI

39
vl.c
View File

@ -4730,6 +4730,7 @@ int main(int argc, char **argv, char **envp)
#endif #endif
CPUState *env; CPUState *env;
int show_vnc_port = 0; int show_vnc_port = 0;
int defconfig = 1;
init_clocks(); init_clocks();
@ -4789,6 +4790,44 @@ int main(int argc, char **argv, char **envp)
tb_size = 0; tb_size = 0;
autostart= 1; autostart= 1;
/* first pass of option parsing */
optind = 1;
while (optind < argc) {
if (argv[optind][0] != '-') {
/* disk image */
continue;
} else {
const QEMUOption *popt;
popt = lookup_opt(argc, argv, &optarg, &optind);
switch (popt->index) {
case QEMU_OPTION_nodefconfig:
defconfig=0;
break;
}
}
}
if (defconfig) {
FILE *fp;
fp = fopen(CONFIG_QEMU_CONFDIR "/qemu.conf", "r");
if (fp) {
if (qemu_config_parse(fp) != 0) {
exit(1);
}
fclose(fp);
}
fp = fopen(CONFIG_QEMU_CONFDIR "/target-" TARGET_ARCH ".conf", "r");
if (fp) {
if (qemu_config_parse(fp) != 0) {
exit(1);
}
fclose(fp);
}
}
/* second pass of option parsing */
optind = 1; optind = 1;
for(;;) { for(;;) {
if (optind >= argc) if (optind >= argc)