qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v14 16/19] qom: Wrap prop visit in visit_start_s


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH v14 16/19] qom: Wrap prop visit in visit_start_struct
Date: Fri, 15 Apr 2016 13:52:08 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

Eric Blake <address@hidden> writes:

> The qmp-input visitor was playing rather fast and loose: when
> visiting a QDict, you could grab members of the root dictionary
> without first pushing into the dict.  But we are about to tighten
> the input visitor, at which point user_creatable_add_type() MUST
> follow the same paradigms as everyone else, of pushing into the
> struct before grabbing its keys, because the value of 'name'
> should be ignored on the top-level visit.

Aha, this is another second client playing fast and loose.  

>
> The change has no impact to the testsuite now, but is required to
> avoid a failure in tests/test-netfilter once qmp-input is made
> stricter.
>
> Signed-off-by: Eric Blake <address@hidden>
>
> ---
> v14: no change
> v13: no change
> v12: new patch
> ---
>  qom/object_interfaces.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
> index a0bf6b7..62ec75a 100644
> --- a/qom/object_interfaces.c
> +++ b/qom/object_interfaces.c
> @@ -118,12 +118,23 @@ Object *user_creatable_add_type(const char *type, const 
> char *id,
>
>      obj = object_new(type);
>      if (qdict) {
> +        visit_start_struct(v, NULL, NULL, 0, &local_err);
> +        if (local_err) {
> +            goto out;
> +        }
>          for (e = qdict_first(qdict); e; e = qdict_next(qdict, e)) {
>              object_property_set(obj, v, e->key, &local_err);
>              if (local_err) {
> -                goto out;
> +                break;
>              }
>          }
> +        if (!local_err) {
> +            visit_check_struct(v, &local_err);

Does this find errors that weren't found before?

> +        }
> +        visit_end_struct(v);
> +        if (local_err) {
> +            goto out;
> +        }
>      }
>
>      object_property_add_child(object_get_objects_root(),



reply via email to

[Prev in Thread] Current Thread [Next in Thread]