[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 09/12] qemu-config: add error propagation to qemu_config_parse
From: |
Paolo Bonzini |
Subject: |
[PATCH 09/12] qemu-config: add error propagation to qemu_config_parse |
Date: |
Wed, 11 Nov 2020 09:25:34 -0500 |
This enables some simplification of vl.c via error_fatal.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
block/blkdebug.c | 3 +--
include/qemu/config-file.h | 4 ++--
softmmu/vl.c | 24 +++++++-----------------
util/qemu-config.c | 20 ++++++++++----------
4 files changed, 20 insertions(+), 31 deletions(-)
diff --git a/block/blkdebug.c b/block/blkdebug.c
index 5fe6172da9..7eaa8a28bf 100644
--- a/block/blkdebug.c
+++ b/block/blkdebug.c
@@ -279,9 +279,8 @@ static int read_config(BDRVBlkdebugState *s, const char
*filename,
return -errno;
}
- ret = qemu_config_parse(f, config_groups, filename);
+ ret = qemu_config_parse(f, config_groups, filename, errp);
if (ret < 0) {
- error_setg(errp, "Could not parse blkdebug config file");
goto fail;
}
}
diff --git a/include/qemu/config-file.h b/include/qemu/config-file.h
index 29226107bd..4e235f63ce 100644
--- a/include/qemu/config-file.h
+++ b/include/qemu/config-file.h
@@ -11,9 +11,9 @@ void qemu_add_drive_opts(QemuOptsList *list);
int qemu_global_option(const char *str);
void qemu_config_write(FILE *fp);
-int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname);
+int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname, Error
**errp);
-int qemu_read_config_file(const char *filename);
+int qemu_read_config_file(const char *filename, Error **errp);
/* Parse QDict options as a replacement for a config file (allowing multiple
enumerated (0..(n-1)) configuration "sections") */
diff --git a/softmmu/vl.c b/softmmu/vl.c
index ac6fec732e..e46f286ad2 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -2041,17 +2041,16 @@ static int global_init_func(void *opaque, QemuOpts
*opts, Error **errp)
return 0;
}
-static int qemu_read_default_config_file(void)
+static void qemu_read_default_config_file(Error **errp)
{
int ret;
+ Error *local_err = NULL;
g_autofree char *file = get_relocated_path(CONFIG_QEMU_CONFDIR
"/qemu.conf");
- ret = qemu_read_config_file(file);
+ ret = qemu_read_config_file(file, &local_err);
if (ret < 0 && ret != -ENOENT) {
- return ret;
+ error_propagate(errp, local_err);
}
-
- return 0;
}
static void user_register_global_props(void)
@@ -2598,9 +2597,7 @@ void qemu_init(int argc, char **argv, char **envp)
}
if (userconfig) {
- if (qemu_read_default_config_file() < 0) {
- exit(1);
- }
+ qemu_read_default_config_file(&error_fatal);
}
/* second pass of option parsing */
@@ -3292,15 +3289,8 @@ void qemu_init(int argc, char **argv, char **envp)
qemu_plugin_opt_parse(optarg, &plugin_list);
break;
case QEMU_OPTION_readconfig:
- {
- int ret = qemu_read_config_file(optarg);
- if (ret < 0) {
- error_report("read config %s: %s", optarg,
- strerror(-ret));
- exit(1);
- }
- break;
- }
+ qemu_read_config_file(optarg, &error_fatal);
+ break;
case QEMU_OPTION_spice:
olist = qemu_find_opts_err("spice", NULL);
if (!olist) {
diff --git a/util/qemu-config.c b/util/qemu-config.c
index 725e3d7e4b..7804333b5a 100644
--- a/util/qemu-config.c
+++ b/util/qemu-config.c
@@ -356,7 +356,7 @@ void qemu_config_write(FILE *fp)
}
/* Returns number of config groups on success, -errno on error */
-int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname)
+int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname, Error
**errp)
{
char line[1024], group[64], id[64], arg[64], value[1024];
Location loc;
@@ -381,7 +381,7 @@ int qemu_config_parse(FILE *fp, QemuOptsList **lists, const
char *fname)
/* group with id */
list = find_list(lists, group, &local_err);
if (local_err) {
- error_report_err(local_err);
+ error_propagate(errp, local_err);
goto out;
}
opts = qemu_opts_create(list, id, 1, NULL);
@@ -392,7 +392,7 @@ int qemu_config_parse(FILE *fp, QemuOptsList **lists, const
char *fname)
/* group without id */
list = find_list(lists, group, &local_err);
if (local_err) {
- error_report_err(local_err);
+ error_propagate(errp, local_err);
goto out;
}
opts = qemu_opts_create(list, NULL, 0, &error_abort);
@@ -404,20 +404,19 @@ int qemu_config_parse(FILE *fp, QemuOptsList **lists,
const char *fname)
sscanf(line, " %63s = \"\"", arg) == 1) {
/* arg = value */
if (opts == NULL) {
- error_report("no group defined");
+ error_setg(errp, "no group defined");
goto out;
}
- if (!qemu_opt_set(opts, arg, value, &local_err)) {
- error_report_err(local_err);
+ if (!qemu_opt_set(opts, arg, value, errp)) {
goto out;
}
continue;
}
- error_report("parse error");
+ error_setg(errp, "parse error");
goto out;
}
if (ferror(fp)) {
- error_report("error reading file");
+ error_setg(errp, "error reading file");
goto out;
}
res = count;
@@ -426,16 +425,17 @@ out:
return res;
}
-int qemu_read_config_file(const char *filename)
+int qemu_read_config_file(const char *filename, Error **errp)
{
FILE *f = fopen(filename, "r");
int ret;
if (f == NULL) {
+ error_setg_errno(errp, errno, "Cannot read config file %s", filename);
return -errno;
}
- ret = qemu_config_parse(f, vm_config_groups, filename);
+ ret = qemu_config_parse(f, vm_config_groups, filename, errp);
fclose(f);
return ret;
}
--
2.26.2
- [RFC PATCH 00/12] Remove QemuOpts usage for HMP, -object and -readconfig, Paolo Bonzini, 2020/11/11
- [PATCH 04/12] qom: use qemu_printf to print help for user-creatable objects, Paolo Bonzini, 2020/11/11
- [PATCH 02/12] keyval: introduce keyval_parse_into, Paolo Bonzini, 2020/11/11
- [PATCH 07/12] qemu-nbd: use keyval for -object parsing, Paolo Bonzini, 2020/11/11
- [PATCH 05/12] hmp: special case help options for object_add, Paolo Bonzini, 2020/11/11
- [PATCH 03/12] hmp: replace "O" parser with keyval, Paolo Bonzini, 2020/11/11
- [PATCH 11/12] qemu-config: parse configuration files to a QDict, Paolo Bonzini, 2020/11/11
- [PATCH 09/12] qemu-config: add error propagation to qemu_config_parse,
Paolo Bonzini <=
- [PATCH 10/12] qemu-option: support accept-any QemuOptsList in qemu_opts_absorb_qdict, Paolo Bonzini, 2020/11/11
- [PATCH 08/12] qemu-img: use keyval for -object parsing, Paolo Bonzini, 2020/11/11
- [PATCH 12/12] qemu: use keyval for -object parsing, Paolo Bonzini, 2020/11/11
- [PATCH 01/12] tests: convert check-qom-proplist to keyval, Paolo Bonzini, 2020/11/11
- [PATCH 06/12] qemu-io: use keyval for -object parsing, Paolo Bonzini, 2020/11/11
- Re: [RFC PATCH 00/12] Remove QemuOpts usage for HMP, -object and -readconfig, Kevin Wolf, 2020/11/13