Skip to content

Commit

Permalink
QemuOpts: Propagate errors through opts_parse()
Browse files Browse the repository at this point in the history
Since I'm touching qemu_opts_parse() anyway, write a function comment
for it.

Signed-off-by: Markus Armbruster <[email protected]>
Reviewed-by: Eric Blake <[email protected]>
  • Loading branch information
Markus Armbruster committed Feb 26, 2015
1 parent d93ae3c commit 4f81273
Showing 1 changed file with 20 additions and 9 deletions.
29 changes: 20 additions & 9 deletions util/qemu-option.c
Original file line number Diff line number Diff line change
Expand Up @@ -813,7 +813,7 @@ int qemu_opts_do_parse(QemuOpts *opts, const char *params, const char *firstname
}

static QemuOpts *opts_parse(QemuOptsList *list, const char *params,
int permit_abbrev, bool defaults)
int permit_abbrev, bool defaults, Error **errp)
{
const char *firstname;
char value[1024], *id = NULL;
Expand Down Expand Up @@ -842,36 +842,47 @@ static QemuOpts *opts_parse(QemuOptsList *list, const char *params,
assert(!defaults || list->merge_lists);
opts = qemu_opts_create(list, id, !defaults, &local_err);
if (opts == NULL) {
if (local_err) {
qerror_report_err(local_err);
error_free(local_err);
}
error_propagate(errp, local_err);
return NULL;
}

opts_do_parse(opts, params, firstname, defaults, &local_err);
if (local_err) {
qerror_report_err(local_err);
error_free(local_err);
error_propagate(errp, local_err);
qemu_opts_del(opts);
return NULL;
}

return opts;
}

/**
* Create a QemuOpts in @list and with options parsed from @params.
* If @permit_abbrev, the first key=value in @params may omit key=,
* and is treated as if key was @list->implied_opt_name.
* Report errors with qerror_report_err().
* Return the new QemuOpts on success, null pointer on error.
*/
QemuOpts *qemu_opts_parse(QemuOptsList *list, const char *params,
int permit_abbrev)
{
return opts_parse(list, params, permit_abbrev, false);
Error *err = NULL;
QemuOpts *opts;

opts = opts_parse(list, params, permit_abbrev, false, &err);
if (!opts) {
qerror_report_err(err);
error_free(err);
}
return opts;
}

void qemu_opts_set_defaults(QemuOptsList *list, const char *params,
int permit_abbrev)
{
QemuOpts *opts;

opts = opts_parse(list, params, permit_abbrev, true);
opts = opts_parse(list, params, permit_abbrev, true, NULL);
assert(opts);
}

Expand Down

0 comments on commit 4f81273

Please sign in to comment.