boot_set_opaque = opaque;
}
-int qemu_boot_set(const char *boot_order)
+void qemu_boot_set(const char *boot_order, Error **errp)
{
+ Error *local_err = NULL;
+
if (!boot_set_handler) {
- return -EINVAL;
+ error_setg(errp, "no function defined to set boot device list for"
+ " this architecture");
+ return;
}
- return boot_set_handler(boot_set_opaque, boot_order);
+
+ validate_bootdevices(boot_order, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+
+ boot_set_handler(boot_set_opaque, boot_order, errp);
}
-void validate_bootdevices(const char *devices)
+void validate_bootdevices(const char *devices, Error **errp)
{
/* We just do some generic consistency checks */
const char *p;
* 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');
}
return;
}
- qemu_boot_set(normal_boot_order);
+ qemu_boot_set(normal_boot_order, NULL);
qemu_unregister_reset(restore_boot_order, normal_boot_order);
g_free(normal_boot_order);