qemu-option: parse_option_bool(): use error_set()
Note that set_option_parameter() callers still expect automatic error reporting with QError, so set_option_parameter() calls qerror_report_err() to keep the same semantics. Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com> Reviewed-By: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
2f39df5b0d
commit
cf62adfabf
@ -169,7 +169,8 @@ QEMUOptionParameter *get_option_parameter(QEMUOptionParameter *list,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int parse_option_bool(const char *name, const char *value, bool *ret)
|
||||
static void parse_option_bool(const char *name, const char *value, bool *ret,
|
||||
Error **errp)
|
||||
{
|
||||
if (value != NULL) {
|
||||
if (!strcmp(value, "on")) {
|
||||
@ -177,13 +178,11 @@ static int parse_option_bool(const char *name, const char *value, bool *ret)
|
||||
} else if (!strcmp(value, "off")) {
|
||||
*ret = 0;
|
||||
} else {
|
||||
qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "'on' or 'off'");
|
||||
return -1;
|
||||
error_set(errp,QERR_INVALID_PARAMETER_VALUE, name, "'on' or 'off'");
|
||||
}
|
||||
} else {
|
||||
*ret = 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void parse_option_number(const char *name, const char *value,
|
||||
@ -263,6 +262,7 @@ int set_option_parameter(QEMUOptionParameter *list, const char *name,
|
||||
const char *value)
|
||||
{
|
||||
bool flag;
|
||||
Error *local_err = NULL;
|
||||
|
||||
// Find a matching parameter
|
||||
list = get_option_parameter(list, name);
|
||||
@ -274,9 +274,10 @@ int set_option_parameter(QEMUOptionParameter *list, const char *name,
|
||||
// Process parameter
|
||||
switch (list->type) {
|
||||
case OPT_FLAG:
|
||||
if (parse_option_bool(name, value, &flag) == -1)
|
||||
return -1;
|
||||
list->value.n = flag;
|
||||
parse_option_bool(name, value, &flag, &local_err);
|
||||
if (!error_is_set(&local_err)) {
|
||||
list->value.n = flag;
|
||||
}
|
||||
break;
|
||||
|
||||
case OPT_STRING:
|
||||
@ -298,6 +299,12 @@ int set_option_parameter(QEMUOptionParameter *list, const char *name,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (error_is_set(&local_err)) {
|
||||
qerror_report_err(local_err);
|
||||
error_free(local_err);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -588,7 +595,8 @@ static int qemu_opt_parse(QemuOpt *opt)
|
||||
/* nothing */
|
||||
return 0;
|
||||
case QEMU_OPT_BOOL:
|
||||
return parse_option_bool(opt->name, opt->str, &opt->value.boolean);
|
||||
parse_option_bool(opt->name, opt->str, &opt->value.boolean, &local_err);
|
||||
break;
|
||||
case QEMU_OPT_NUMBER:
|
||||
parse_option_number(opt->name, opt->str, &opt->value.uint,
|
||||
&local_err);
|
||||
|
Loading…
Reference in New Issue
Block a user