summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlue Swirl <blauwirbel@gmail.com>2011-02-05 14:34:25 +0000
committerBlue Swirl <blauwirbel@gmail.com>2011-02-12 08:27:55 +0000
commit0bcdeda7e478f1ce1345585d8240e8d5a9b274d5 (patch)
tree473aa9888c343a78772c02e1cab27f47329a989b
parent5c81e4ca9e5c11239a9db12f0f57c6c1e24b6760 (diff)
downloadqemu-0bcdeda7e478f1ce1345585d8240e8d5a9b274d5.tar.gz
qemu-0bcdeda7e478f1ce1345585d8240e8d5a9b274d5.tar.bz2
qemu-0bcdeda7e478f1ce1345585d8240e8d5a9b274d5.zip
qdev: add creation function that may fail
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
-rw-r--r--hw/qdev.c14
-rw-r--r--hw/qdev.h1
2 files changed, 14 insertions, 1 deletions
diff --git a/hw/qdev.c b/hw/qdev.c
index c7fec44a83..1aa1ea0e26 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -106,6 +106,18 @@ static DeviceState *qdev_create_from_info(BusState *bus, DeviceInfo *info)
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;
if (!bus) {
@@ -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;