diff --git a/bootdevice.c b/bootdevice.c index aae4cac27f4bb6740455dfe9edf9185e041c3cd4..184348ecd2f073281ac52376031e942077b2a42a 100644 --- a/bootdevice.c +++ b/bootdevice.c @@ -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; @@ -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'); } diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index 84798efd72e6b142f1943c52a5c898c0b68124fa..1382d63fb13bd963fb1415e8ec8d357024c23a06 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -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 */ diff --git a/vl.c b/vl.c index f665621f122efc43d8e0cc0729ab71f51465d3f4..a824a7d8b4205374b2292e9f4653ba18f748bcf5 100644 --- a/vl.c +++ b/vl.c @@ -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);