QemuOpts: Convert qemu_opts_set() to Error, fix its use

Return the Error object instead of reporting it with
qerror_report_err().

Change callers that assume the function can't fail to pass
&error_abort, so that should the assumption ever break, it'll break
noisily.

Turns out all callers outside its unit test assume that.  We could
drop the Error ** argument, but that would make the interface less
regular, so don't.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Markus Armbruster 2015-02-12 17:07:34 +01:00
parent 39101f2511
commit 79087c782e
5 changed files with 22 additions and 18 deletions

View File

@ -110,8 +110,8 @@ QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id,
int fail_if_exists, Error **errp); int fail_if_exists, Error **errp);
void qemu_opts_reset(QemuOptsList *list); void qemu_opts_reset(QemuOptsList *list);
void qemu_opts_loc_restore(QemuOpts *opts); void qemu_opts_loc_restore(QemuOpts *opts);
int qemu_opts_set(QemuOptsList *list, const char *id, void qemu_opts_set(QemuOptsList *list, const char *id,
const char *name, const char *value); const char *name, const char *value, Error **errp);
const char *qemu_opts_id(QemuOpts *opts); const char *qemu_opts_id(QemuOpts *opts);
void qemu_opts_set_id(QemuOpts *opts, char *id); void qemu_opts_set_id(QemuOpts *opts, char *id);
void qemu_opts_del(QemuOpts *opts); void qemu_opts_del(QemuOpts *opts);

View File

@ -1296,9 +1296,9 @@ int net_init_clients(void)
if (default_net) { if (default_net) {
/* if no clients, we use a default config */ /* if no clients, we use a default config */
qemu_opts_set(net, NULL, "type", "nic"); qemu_opts_set(net, NULL, "type", "nic", &error_abort);
#ifdef CONFIG_SLIRP #ifdef CONFIG_SLIRP
qemu_opts_set(net, NULL, "type", "user"); qemu_opts_set(net, NULL, "type", "user", &error_abort);
#endif #endif
} }

View File

@ -388,9 +388,9 @@ static void test_qemu_opts_reset(void)
static void test_qemu_opts_set(void) static void test_qemu_opts_set(void)
{ {
Error *err = NULL;
QemuOptsList *list; QemuOptsList *list;
QemuOpts *opts; QemuOpts *opts;
int ret;
const char *opt; const char *opt;
list = qemu_find_opts("opts_list_01"); list = qemu_find_opts("opts_list_01");
@ -403,8 +403,8 @@ static void test_qemu_opts_set(void)
g_assert(opts == NULL); g_assert(opts == NULL);
/* implicitly create opts and set str3 value */ /* implicitly create opts and set str3 value */
ret = qemu_opts_set(list, NULL, "str3", "value"); qemu_opts_set(list, NULL, "str3", "value", &err);
g_assert(ret == 0); g_assert(!err);
g_assert(!QTAILQ_EMPTY(&list->head)); g_assert(!QTAILQ_EMPTY(&list->head));
/* get the just created opts */ /* get the just created opts */

View File

@ -690,19 +690,18 @@ void qemu_opts_loc_restore(QemuOpts *opts)
loc_restore(&opts->loc); loc_restore(&opts->loc);
} }
int qemu_opts_set(QemuOptsList *list, const char *id, void qemu_opts_set(QemuOptsList *list, const char *id,
const char *name, const char *value) const char *name, const char *value, Error **errp)
{ {
QemuOpts *opts; QemuOpts *opts;
Error *local_err = NULL; Error *local_err = NULL;
opts = qemu_opts_create(list, id, 1, &local_err); opts = qemu_opts_create(list, id, 1, &local_err);
if (local_err) { if (local_err) {
qerror_report_err(local_err); error_propagate(errp, local_err);
error_free(local_err); return;
return -1;
} }
return qemu_opt_set(opts, name, value); qemu_opt_set_err(opts, name, value, errp);
} }
const char *qemu_opts_id(QemuOpts *opts) const char *qemu_opts_id(QemuOpts *opts)

15
vl.c
View File

@ -3023,16 +3023,20 @@ int main(int argc, char **argv, char **envp)
} }
break; break;
case QEMU_OPTION_kernel: case QEMU_OPTION_kernel:
qemu_opts_set(qemu_find_opts("machine"), 0, "kernel", optarg); qemu_opts_set(qemu_find_opts("machine"), 0, "kernel", optarg,
&error_abort);
break; break;
case QEMU_OPTION_initrd: case QEMU_OPTION_initrd:
qemu_opts_set(qemu_find_opts("machine"), 0, "initrd", optarg); qemu_opts_set(qemu_find_opts("machine"), 0, "initrd", optarg,
&error_abort);
break; break;
case QEMU_OPTION_append: case QEMU_OPTION_append:
qemu_opts_set(qemu_find_opts("machine"), 0, "append", optarg); qemu_opts_set(qemu_find_opts("machine"), 0, "append", optarg,
&error_abort);
break; break;
case QEMU_OPTION_dtb: case QEMU_OPTION_dtb:
qemu_opts_set(qemu_find_opts("machine"), 0, "dtb", optarg); qemu_opts_set(qemu_find_opts("machine"), 0, "dtb", optarg,
&error_abort);
break; break;
case QEMU_OPTION_cdrom: case QEMU_OPTION_cdrom:
drive_add(IF_DEFAULT, 2, optarg, CDROM_OPTS); drive_add(IF_DEFAULT, 2, optarg, CDROM_OPTS);
@ -3136,7 +3140,8 @@ int main(int argc, char **argv, char **envp)
} }
break; break;
case QEMU_OPTION_bios: case QEMU_OPTION_bios:
qemu_opts_set(qemu_find_opts("machine"), 0, "firmware", optarg); qemu_opts_set(qemu_find_opts("machine"), 0, "firmware", optarg,
&error_abort);
break; break;
case QEMU_OPTION_singlestep: case QEMU_OPTION_singlestep:
singlestep = 1; singlestep = 1;