On Tue, Feb 05, 2013 at 09:39:17PM +0100, Laszlo Ersek wrote: > Error consumption is moved from qdev_prop_parse() to its direct callers. > > Conversion status (call chains covered or substituted by error propagation > marked with square brackets): > > do_device_add -> [qemu_find_opts -> error_report] > do_device_add -> qdev_device_add -> qerror_report > do_device_add -> qdev_device_add -> qbus_find -> qbus_find_recursive > -> qerror_report > do_device_add -> qdev_device_add -> qbus_find -> qerror_report > do_device_add -> qdev_device_add -> set_property -> [qdev_prop_parse > -> qerror_report_err] > > Signed-off-by: Laszlo Ersek <ler...@redhat.com>
Reviewed-by: Eduardo Habkost <ehabk...@redhat.com> > --- > hw/qdev-monitor.c | 5 ++++- > hw/qdev-properties.c | 9 ++++++--- > 2 files changed, 10 insertions(+), 4 deletions(-) > > diff --git a/hw/qdev-monitor.c b/hw/qdev-monitor.c > index 02297e1..5eb1c8c 100644 > --- a/hw/qdev-monitor.c > +++ b/hw/qdev-monitor.c > @@ -103,13 +103,16 @@ static void qdev_print_devinfo(ObjectClass *klass, void > *opaque) > static int set_property(const char *name, const char *value, void *opaque) > { > DeviceState *dev = opaque; > + Error *err = NULL; > > if (strcmp(name, "driver") == 0) > return 0; > if (strcmp(name, "bus") == 0) > return 0; > > - if (qdev_prop_parse(dev, name, value, NULL) == -1) { > + if (qdev_prop_parse(dev, name, value, &err) == -1) { > + qerror_report_err(err); > + error_free(err); > return -1; > } > return 0; > diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c > index e2dbbbe..8e3d014 100644 > --- a/hw/qdev-properties.c > +++ b/hw/qdev-properties.c > @@ -850,8 +850,7 @@ int qdev_prop_parse(DeviceState *dev, const char *name, > const char *value, > g_free(legacy_name); > > if (err) { > - qerror_report_err(err); > - error_free(err); > + error_propagate(errp, err); > return -1; > } > return 0; > @@ -963,10 +962,14 @@ void qdev_prop_set_globals(DeviceState *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, NULL) != > 0) { > + if (qdev_prop_parse(dev, prop->property, prop->value, &err) != > 0) { > + qerror_report_err(err); > + error_free(err); > exit(1); > } > } > -- > 1.7.1 > > -- Eduardo