This patch adds the ability to determine the build-configured runtime "config file" paths from the command line. After support for cpu model definitions were added to the default runtime "target-" config file, testing of this feature has tripped over an unintentionally mis-installed config file enough to indicate some help is needed resolving such issues.
As no general "verbose" flag is currently available, specifying "-readconfig ?" on the command line will maintain the default (config file) disposition but additionally emit diagnostic info. This mode is optional, otherwise the existing startup behavior is identical. Signed-off-by: john cooper <john.coo...@redhat.com> --- diff --git a/qemu-config.c b/qemu-config.c index 5a4e61b..a490603 100644 --- a/qemu-config.c +++ b/qemu-config.c @@ -518,21 +518,29 @@ out: return res; } -int qemu_read_config_file(const char *filename) +/* attempt to open and parse config file, report problems if vflag + */ +int qemu_read_config_file(const char *filename, int vflag) { FILE *f = fopen(filename, "r"); - int ret; + int rv = 0; if (f == NULL) { - return -errno; + rv = -errno; } - - ret = qemu_config_parse(f, vm_config_groups, filename); - fclose(f); - - if (ret == 0) { - return 0; - } else { - return -EINVAL; + else if (qemu_config_parse(f, vm_config_groups, filename) != 0) { + rv = -EINVAL; + } + else if (vflag) { + fprintf(stderr, "read config file %s\n", filename); } + if (f) { + fclose(f); + } + if (rv && vflag) { + fprintf(stderr, "can't read config file %s: %s\n", + filename, strerror(-rv)); + } + return rv; } + diff --git a/qemu-config.h b/qemu-config.h index dca69d4..2e15556 100644 --- a/qemu-config.h +++ b/qemu-config.h @@ -23,6 +23,6 @@ void qemu_add_globals(void); void qemu_config_write(FILE *fp); int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname); -int qemu_read_config_file(const char *filename); +int qemu_read_config_file(const char *filename, int vflag); #endif /* QEMU_CONFIG_H */ diff --git a/vl.c b/vl.c index 7121cd0..23c7276 100644 --- a/vl.c +++ b/vl.c @@ -2582,6 +2582,7 @@ int main(int argc, char **argv, char **envp) #endif int show_vnc_port = 0; int defconfig = 1; + int defconfig_verbose = 0; error_set_progname(argv[0]); @@ -2657,6 +2658,10 @@ int main(int argc, char **argv, char **envp) case QEMU_OPTION_nodefconfig: defconfig=0; break; + case QEMU_OPTION_readconfig: + if (!strcmp(optarg, "?")) + defconfig_verbose = 1; + break; } } } @@ -2664,12 +2669,14 @@ int main(int argc, char **argv, char **envp) if (defconfig) { int ret; - ret = qemu_read_config_file(CONFIG_QEMU_CONFDIR "/qemu.conf"); + ret = qemu_read_config_file(CONFIG_QEMU_CONFDIR "/qemu.conf", + defconfig_verbose); if (ret < 0 && ret != -ENOENT) { exit(1); } - ret = qemu_read_config_file(arch_config_name); + ret = qemu_read_config_file(arch_config_name, + defconfig_verbose); if (ret < 0 && ret != -ENOENT) { exit(1); } @@ -3386,15 +3393,9 @@ int main(int argc, char **argv, char **envp) xen_mode = XEN_ATTACH; break; case QEMU_OPTION_readconfig: - { - int ret = qemu_read_config_file(optarg); - if (ret < 0) { - fprintf(stderr, "read config %s: %s\n", optarg, - strerror(-ret)); - exit(1); - } - break; - } + if (!defconfig_verbose && qemu_read_config_file(optarg, 1) < 0) + exit(1); + break; case QEMU_OPTION_writeconfig: { FILE *fp; -- john.coo...@redhat.com