On 01/02/2017 09:44 AM, Igor Mammedov wrote:

s/repporting/reporting/ in the subject

> Do it by adding 'id' property to hostmem backends and fetch it
> in query-memdev from object directly.
> 
> Signed-off-by: Igor Mammedov <[email protected]>
> ---

> +++ b/qom/object_interfaces.c
> @@ -4,6 +4,7 @@
>  #include "qemu/module.h"
>  #include "qapi-visit.h"
>  #include "qapi/opts-visitor.h"
> +#include "qapi/qmp/qstring.h"
>  
>  void user_creatable_complete(Object *obj, Error **errp)
>  {
> @@ -35,7 +36,7 @@ bool user_creatable_can_be_deleted(UserCreatable *uc, Error 
> **errp)
>  }
>  
>  Object *user_creatable_add_type(const char *type, const char *id,
> -                                const QDict *qdict,
> +                                QDict *qdict,
>                                  Visitor *v, Error **errp)
>  {
>      Object *obj;
> @@ -62,6 +63,9 @@ Object *user_creatable_add_type(const char *type, const 
> char *id,
>  
>      assert(qdict);
>      obj = object_new(type);
> +    if (object_property_find(obj, "id", NULL)) {
> +        qdict_put(qdict, "id", qstring_from_str(id));
> +    }

Wait. Isn't this going to inject an 'id' dict member to every use of
user_creatable_add_type()?  But not all QAPI structs contain an id
member.  Which means that you are now explicitly relying on the visitor
to silently ignore garbage in the dictionary, rather than our desired
goal of only validating if the dictionary exactly matches what the QAPI
says it will match.

I'm not sure if I like this hack, or if there is a better way to do
things when using a strict (rather than relaxed) input visitor.

>      visit_start_struct(v, NULL, NULL, 0, &local_err);
>      if (local_err) {
>          goto out;
> 

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to