diff options
author | Andreas Färber <afaerber@suse.de> | 2013-05-01 16:10:24 +0200 |
---|---|---|
committer | Andreas Färber <afaerber@suse.de> | 2013-05-06 19:40:44 +0200 |
commit | b1fe9bcbceb6fb9d800f735da37aa79ac4552c6e (patch) | |
tree | 228b470d02bea1a254336d5a7fd1f82e3dd93457 /hw/core | |
parent | 7e5292b553c9ec27e0816abdcb717f87aa6b6a8d (diff) |
qdev: Let qdev_prop_parse() pass through Error
Move error reporting to callers.
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
Diffstat (limited to 'hw/core')
-rw-r--r-- | hw/core/qdev-properties.c | 25 | ||||
-rw-r--r-- | hw/core/qdev.c | 7 |
2 files changed, 17 insertions, 15 deletions
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index ca1739ec84..716ba19a3c 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -986,25 +986,18 @@ void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev, } } -int qdev_prop_parse(DeviceState *dev, const char *name, const char *value) +void qdev_prop_parse(DeviceState *dev, const char *name, const char *value, + Error **errp) { char *legacy_name; - Error *err = NULL; legacy_name = g_strdup_printf("legacy-%s", name); if (object_property_get_type(OBJECT(dev), legacy_name, NULL)) { - object_property_parse(OBJECT(dev), value, legacy_name, &err); + object_property_parse(OBJECT(dev), value, legacy_name, errp); } else { - object_property_parse(OBJECT(dev), value, name, &err); + object_property_parse(OBJECT(dev), value, name, errp); } g_free(legacy_name); - - if (err) { - qerror_report_err(err); - error_free(err); - return -1; - } - return 0; } void qdev_prop_set_bit(DeviceState *dev, const char *name, bool value) @@ -1106,18 +1099,22 @@ void qdev_prop_register_global_list(GlobalProperty *props) } } -void qdev_prop_set_globals(DeviceState *dev) +void qdev_prop_set_globals(DeviceState *dev, Error **errp) { ObjectClass *class = object_get_class(OBJECT(dev)); do { GlobalProperty *prop; QTAILQ_FOREACH(prop, &global_props, next) { + Error *err = NULL; + if (strcmp(object_class_get_name(class), prop->driver) != 0) { continue; } - if (qdev_prop_parse(dev, prop->property, prop->value) != 0) { - exit(1); + qdev_prop_parse(dev, prop->property, prop->value, &err); + if (err != NULL) { + error_propagate(errp, err); + return; } } class = object_class_get_parent(class); diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 069ac9034c..6985ad870c 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -752,7 +752,12 @@ static void device_initfn(Object *obj) } class = object_class_get_parent(class); } while (class != object_class_by_name(TYPE_DEVICE)); - qdev_prop_set_globals(dev); + qdev_prop_set_globals(dev, &err); + if (err != NULL) { + qerror_report_err(err); + error_free(err); + exit(1); + } object_property_add_link(OBJECT(dev), "parent_bus", TYPE_BUS, (Object **)&dev->parent_bus, &err); |