[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 06/15] set_property(): extend signature with
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v2 06/15] set_property(): extend signature with Error |
Date: |
Wed, 20 Mar 2013 15:17:18 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux) |
Luiz Capitulino <address@hidden> writes:
> On Thu, 7 Feb 2013 15:18:41 -0200
> Eduardo Habkost <address@hidden> wrote:
>
>> On Tue, Feb 05, 2013 at 09:39:19PM +0100, Laszlo Ersek wrote:
>> >
>> > Signed-off-by: Laszlo Ersek <address@hidden>
>> > ---
>> > hw/qdev-monitor.c | 21 ++++++++++++++++-----
>> > 1 files changed, 16 insertions(+), 5 deletions(-)
>> >
>> > diff --git a/hw/qdev-monitor.c b/hw/qdev-monitor.c
>> > index cf96046..545e66c 100644
>> > --- a/hw/qdev-monitor.c
>> > +++ b/hw/qdev-monitor.c
>> > @@ -100,9 +100,14 @@ static void qdev_print_devinfo(ObjectClass *klass,
>> > void *opaque)
>> > error_printf("\n");
>> > }
>> >
>> > +typedef struct {
>> > + DeviceState *dev;
>> > + Error **errp;
>> > +} PropertyContext;
>> > +
>> > static int set_property(const char *name, const char *value, void *opaque)
>> > {
>> > - DeviceState *dev = opaque;
>> > + PropertyContext *ctx = opaque;
>> > Error *err = NULL;
>> >
>> > if (strcmp(name, "driver") == 0)
>> > @@ -110,7 +115,7 @@ static int set_property(const char *name, const char
>> > *value, void *opaque)
>> > if (strcmp(name, "bus") == 0)
>> > return 0;
>> >
>> > - qdev_prop_parse(dev, name, value, &err);
>> > + qdev_prop_parse(ctx->dev, name, value, &err);
>> > if (error_is_set(&err)) {
>> > qerror_report_err(err);
>> > error_free(err);
>> > @@ -481,10 +486,16 @@ DeviceState *qdev_device_add(QemuOpts *opts)
>> > if (id) {
>> > qdev->id = id;
>> > }
>> > - if (qemu_opt_foreach(opts, set_property, qdev, 1) != 0) {
>> > - qdev_free(qdev);
>> > - return NULL;
>> > +
>> > + {
>> > + PropertyContext ctx = { .dev = qdev, .errp = NULL };
>> > +
>> > + if (qemu_opt_foreach(opts, set_property, &ctx, 1) != 0) {
>>
>> What about redefining qemu_opt_loopfunc to accept an Error parameter?
>>
>> qemu_opt_foreach() is used in only 4 places in the whole QEMU code, and
>> it already has code to abort on error (but using the function return
>> value instead of an Error** paramater).
>
> He would have to convert the users too, which would be very welcome,
> but it's out of the scope of this series IMO (but would be fine as
> a first series to this work).
I'm fine with this patch as is.
I wouldn't add Error support to qemu_opt_foreach(), I'd replace it by a
more C-ish qemu_opt_next():
for (opt = qemu_opt_next(NULL); opt; opt = qemu_opt_next(opt)) {
set_property(qdev, qemu_opt_name(opt), qemu_opt_value(opt), &err);
if (err) {
...
break;
}
}
Higher-order functions are great in Lisp, but awkward in C.
>
>>
>>
>>
>> > + qdev_free(qdev);
>> > + return NULL;
>> > + }
>> > }
>> > +
>> > if (qdev->id) {
>> > object_property_add_child(qdev_get_peripheral(), qdev->id,
>> > OBJECT(qdev), NULL);
>> > --
>> > 1.7.1
>> >
>> >
>>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH v2 06/15] set_property(): extend signature with Error,
Markus Armbruster <=