From 0bcdeda7e478f1ce1345585d8240e8d5a9b274d5 Mon Sep 17 00:00:00 2001 From: Blue Swirl Date: Sat, 5 Feb 2011 14:34:25 +0000 Subject: [PATCH] qdev: add creation function that may fail Signed-off-by: Blue Swirl --- hw/qdev.c | 14 +++++++++++++- hw/qdev.h | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/hw/qdev.c b/hw/qdev.c index c7fec44a83..1aa1ea0e26 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -105,6 +105,18 @@ static DeviceState *qdev_create_from_info(BusState *bus, DeviceInfo *info) and allows properties to be set. qdev_init should be called to initialize the actual device emulation. */ DeviceState *qdev_create(BusState *bus, const char *name) +{ + DeviceState *dev; + + dev = qdev_try_create(bus, name); + if (!dev) { + hw_error("Unknown device '%s' for bus '%s'\n", name, bus->info->name); + } + + return dev; +} + +DeviceState *qdev_try_create(BusState *bus, const char *name) { DeviceInfo *info; @@ -114,7 +126,7 @@ DeviceState *qdev_create(BusState *bus, const char *name) info = qdev_find_info(bus->info, name); if (!info) { - hw_error("Unknown device '%s' for bus '%s'\n", name, bus->info->name); + return NULL; } return qdev_create_from_info(bus, info); diff --git a/hw/qdev.h b/hw/qdev.h index 9808f85119..8a13ec95cc 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -122,6 +122,7 @@ typedef struct GlobalProperty { /*** Board API. This should go away once we have a machine config file. ***/ DeviceState *qdev_create(BusState *bus, const char *name); +DeviceState *qdev_try_create(BusState *bus, const char *name); int qdev_device_help(QemuOpts *opts); DeviceState *qdev_device_add(QemuOpts *opts); int qdev_init(DeviceState *dev) QEMU_WARN_UNUSED_RESULT;