qemu-option: Clean up after the previous commit

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200415083048.14339-6-armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Markus Armbruster 2020-04-15 10:30:48 +02:00
parent 7b1cd1c65a
commit 2500f6f30b
1 changed files with 15 additions and 28 deletions

View File

@ -965,18 +965,16 @@ void qemu_opts_set_defaults(QemuOptsList *list, const char *params,
assert(opts); assert(opts);
} }
typedef struct OptsFromQDictState { static void qemu_opts_from_qdict_entry(QemuOpts *opts,
QemuOpts *opts; const QDictEntry *entry,
Error **errp; Error **errp)
} OptsFromQDictState;
static void qemu_opts_from_qdict_1(const char *key, QObject *obj, void *opaque)
{ {
OptsFromQDictState *state = opaque; const char *key = qdict_entry_key(entry);
QObject *obj = qdict_entry_value(entry);
char buf[32], *tmp = NULL; char buf[32], *tmp = NULL;
const char *value; const char *value;
if (!strcmp(key, "id") || *state->errp) { if (!strcmp(key, "id")) {
return; return;
} }
@ -997,7 +995,7 @@ static void qemu_opts_from_qdict_1(const char *key, QObject *obj, void *opaque)
return; return;
} }
qemu_opt_set(state->opts, key, value, state->errp); qemu_opt_set(opts, key, value, errp);
g_free(tmp); g_free(tmp);
} }
@ -1010,7 +1008,6 @@ static void qemu_opts_from_qdict_1(const char *key, QObject *obj, void *opaque)
QemuOpts *qemu_opts_from_qdict(QemuOptsList *list, const QDict *qdict, QemuOpts *qemu_opts_from_qdict(QemuOptsList *list, const QDict *qdict,
Error **errp) Error **errp)
{ {
OptsFromQDictState state;
Error *local_err = NULL; Error *local_err = NULL;
QemuOpts *opts; QemuOpts *opts;
const QDictEntry *entry; const QDictEntry *entry;
@ -1024,20 +1021,15 @@ QemuOpts *qemu_opts_from_qdict(QemuOptsList *list, const QDict *qdict,
assert(opts != NULL); assert(opts != NULL);
state.errp = &local_err;
state.opts = opts;
for (entry = qdict_first(qdict); for (entry = qdict_first(qdict);
entry; entry;
entry = qdict_next(qdict, entry)) { entry = qdict_next(qdict, entry)) {
qemu_opts_from_qdict_1(qdict_entry_key(entry), qemu_opts_from_qdict_entry(opts, entry, &local_err);
qdict_entry_value(entry), if (local_err) {
&state); error_propagate(errp, local_err);
} qemu_opts_del(opts);
if (local_err) { return NULL;
error_propagate(errp, local_err); }
qemu_opts_del(opts);
return NULL;
} }
return opts; return opts;
@ -1056,21 +1048,16 @@ void qemu_opts_absorb_qdict(QemuOpts *opts, QDict *qdict, Error **errp)
while (entry != NULL) { while (entry != NULL) {
Error *local_err = NULL; Error *local_err = NULL;
OptsFromQDictState state = {
.errp = &local_err,
.opts = opts,
};
next = qdict_next(qdict, entry); next = qdict_next(qdict, entry);
if (find_desc_by_name(opts->list->desc, entry->key)) { if (find_desc_by_name(opts->list->desc, entry->key)) {
qemu_opts_from_qdict_1(entry->key, entry->value, &state); qemu_opts_from_qdict_entry(opts, entry, &local_err);
if (local_err) { if (local_err) {
error_propagate(errp, local_err); error_propagate(errp, local_err);
return; return;
} else {
qdict_del(qdict, entry->key);
} }
qdict_del(qdict, entry->key);
} }
entry = next; entry = next;