On Mon, 9 Jan 2017 14:26:28 -0600 Eric Blake <[email protected]> wrote:
> On 01/09/2017 08:17 AM, Igor Mammedov wrote: > > >> 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. > > a bit less ugly variant but with the same basic idea would look like: > > -------------- > > Subject: [PATCH] fix qmp/hmp query-memdev not reporting IDs of memory > > backends > > > > > > Considering 'id' is mandatory for user_creatable objects/backends > > > > and user_creatable_add_type() always has it as an argument > > > > regardless of where from it is called CLI/monitor or QMP, > > > > Fix issue by adding 'id' property to hostmem backends and > > > > set it in user_creatable_add_type() for every object that > > > > implements 'id' property. Then later at query-memdev time > > > > get 'id' from object directly. > > Yes, that seems like an improved message. > > > > > > > Signed-off-by: Igor Mammedov <[email protected]> > > > > [...] > > > > diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c > > index 9b4155a..03a95c3 100644 > > --- a/qom/object_interfaces.c > > +++ b/qom/object_interfaces.c > > @@ -62,6 +62,12 @@ Object *user_creatable_add_type(const char *type, const > > char *id, > > > > assert(qdict); > > obj = object_new(type); > > + if (object_property_find(obj, "id", NULL)) { > > + object_property_set_str(obj, id, "id", &local_err); > > + if (local_err) { > > + goto out; > > + } > > + } > > Works for me. > Thanks, Then, I'll respin v2 with noted fixups in commit messages this amended patch.
