Skip to content

Commit

Permalink
bootdevice: add Error **errp argument for validate_bootdevices()
Browse files Browse the repository at this point in the history
It will be useful for checking when we change traditional
boot order dynamically and propagate error message
to the monitor.

Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
  • Loading branch information
gongleiarei authored and root committed Dec 22, 2014
1 parent 9816833 commit 703008e
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 8 deletions.
10 changes: 5 additions & 5 deletions bootdevice.c
Expand Up @@ -55,7 +55,7 @@ int qemu_boot_set(const char *boot_order)
return boot_set_handler(boot_set_opaque, boot_order);
}

void validate_bootdevices(const char *devices)
void validate_bootdevices(const char *devices, Error **errp)
{
/* We just do some generic consistency checks */
const char *p;
Expand All @@ -72,12 +72,12 @@ void validate_bootdevices(const char *devices)
* features.
*/
if (*p < 'a' || *p > 'p') {
fprintf(stderr, "Invalid boot device '%c'\n", *p);
exit(1);
error_setg(errp, "Invalid boot device '%c'", *p);
return;
}
if (bitmap & (1 << (*p - 'a'))) {
fprintf(stderr, "Boot device '%c' was given twice\n", *p);
exit(1);
error_setg(errp, "Boot device '%c' was given twice", *p);
return;
}
bitmap |= 1 << (*p - 'a');
}
Expand Down
2 changes: 1 addition & 1 deletion include/sysemu/sysemu.h
Expand Up @@ -217,7 +217,7 @@ void device_add_bootindex_property(Object *obj, int32_t *bootindex,
const char *name, const char *suffix,
DeviceState *dev, Error **errp);
void restore_boot_order(void *opaque);
void validate_bootdevices(const char *devices);
void validate_bootdevices(const char *devices, Error **errp);

/* handler to set the boot_device order for a specific type of QEMUMachine */
/* return 0 if success */
Expand Down
13 changes: 11 additions & 2 deletions vl.c
Expand Up @@ -4087,16 +4087,25 @@ int main(int argc, char **argv, char **envp)
if (opts) {
char *normal_boot_order;
const char *order, *once;
Error *local_err = NULL;

order = qemu_opt_get(opts, "order");
if (order) {
validate_bootdevices(order);
validate_bootdevices(order, &local_err);
if (local_err) {
error_report("%s", error_get_pretty(local_err));
exit(1);
}
boot_order = order;
}

once = qemu_opt_get(opts, "once");
if (once) {
validate_bootdevices(once);
validate_bootdevices(once, &local_err);
if (local_err) {
error_report("%s", error_get_pretty(local_err));
exit(1);
}
normal_boot_order = g_strdup(boot_order);
boot_order = once;
qemu_register_reset(restore_boot_order, normal_boot_order);
Expand Down

0 comments on commit 703008e

Please sign in to comment.