Revision cf62adfa
b/qemu-option.c | ||
---|---|---|
169 | 169 |
return NULL; |
170 | 170 |
} |
171 | 171 |
|
172 |
static int parse_option_bool(const char *name, const char *value, bool *ret) |
|
172 |
static void parse_option_bool(const char *name, const char *value, bool *ret, |
|
173 |
Error **errp) |
|
173 | 174 |
{ |
174 | 175 |
if (value != NULL) { |
175 | 176 |
if (!strcmp(value, "on")) { |
... | ... | |
177 | 178 |
} else if (!strcmp(value, "off")) { |
178 | 179 |
*ret = 0; |
179 | 180 |
} else { |
180 |
qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "'on' or 'off'"); |
|
181 |
return -1; |
|
181 |
error_set(errp,QERR_INVALID_PARAMETER_VALUE, name, "'on' or 'off'"); |
|
182 | 182 |
} |
183 | 183 |
} else { |
184 | 184 |
*ret = 1; |
185 | 185 |
} |
186 |
return 0; |
|
187 | 186 |
} |
188 | 187 |
|
189 | 188 |
static void parse_option_number(const char *name, const char *value, |
... | ... | |
263 | 262 |
const char *value) |
264 | 263 |
{ |
265 | 264 |
bool flag; |
265 |
Error *local_err = NULL; |
|
266 | 266 |
|
267 | 267 |
// Find a matching parameter |
268 | 268 |
list = get_option_parameter(list, name); |
... | ... | |
274 | 274 |
// Process parameter |
275 | 275 |
switch (list->type) { |
276 | 276 |
case OPT_FLAG: |
277 |
if (parse_option_bool(name, value, &flag) == -1) |
|
278 |
return -1; |
|
279 |
list->value.n = flag; |
|
277 |
parse_option_bool(name, value, &flag, &local_err); |
|
278 |
if (!error_is_set(&local_err)) { |
|
279 |
list->value.n = flag; |
|
280 |
} |
|
280 | 281 |
break; |
281 | 282 |
|
282 | 283 |
case OPT_STRING: |
... | ... | |
298 | 299 |
return -1; |
299 | 300 |
} |
300 | 301 |
|
302 |
if (error_is_set(&local_err)) { |
|
303 |
qerror_report_err(local_err); |
|
304 |
error_free(local_err); |
|
305 |
return -1; |
|
306 |
} |
|
307 |
|
|
301 | 308 |
return 0; |
302 | 309 |
} |
303 | 310 |
|
... | ... | |
588 | 595 |
/* nothing */ |
589 | 596 |
return 0; |
590 | 597 |
case QEMU_OPT_BOOL: |
591 |
return parse_option_bool(opt->name, opt->str, &opt->value.boolean); |
|
598 |
parse_option_bool(opt->name, opt->str, &opt->value.boolean, &local_err); |
|
599 |
break; |
|
592 | 600 |
case QEMU_OPT_NUMBER: |
593 | 601 |
parse_option_number(opt->name, opt->str, &opt->value.uint, |
594 | 602 |
&local_err); |
Also available in: Unified diff