On Thu, Apr 25, 2019 at 15:28:31 +0200, Ján Tomko wrote: > On Mon, Apr 15, 2019 at 06:02:01PM +0200, Peter Krempa wrote: > > Simplify virQEMUQAPISchemaTraverse by separating out the necessary > > operations for given 'meta-type' into separate functions. > > > > Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> > > --- > > src/qemu/qemu_qapi.c | 117 ++++++++++++++++++++++++++++--------------- > > 1 file changed, 78 insertions(+), 39 deletions(-) > > > > diff --git a/src/qemu/qemu_qapi.c b/src/qemu/qemu_qapi.c > > index 2652061f4e..5995e5006e 100644 > > --- a/src/qemu/qemu_qapi.c > > +++ b/src/qemu/qemu_qapi.c > > @@ -105,68 +105,107 @@ static int > > virQEMUQAPISchemaTraverse(const char *baseName, > > char **query, > > virHashTablePtr schema, > > - virJSONValuePtr *type) > > + virJSONValuePtr *type); > > + > > + > > +static int > > +virQEMUQAPISchemaTraverseObject(virJSONValuePtr cur, > > + char **query, > > + virHashTablePtr schema, > > + virJSONValuePtr *type) > > { > > - virJSONValuePtr curtype; > > virJSONValuePtr obj; > > - const char *metatype; > > const char *querytype = NULL; > > - const char *querystr; > > - char modifier; > > + const char *querystr = *query; > > + char modifier = *querystr; > > + > > + if (!c_isalpha(modifier)) > > + querystr++; > > + > > + if (modifier == '+') { > > + querytype = virQEMUQAPISchemaObjectGetType("variants", > > + querystr, > > + "case", cur); > > + } else { > > + obj = virQEMUQAPISchemaObjectGet("members", querystr, "name", cur); > > + > > + if (modifier == '*' && > > + !virJSONValueObjectHasKey(obj, "default")) > > + return 0; > > + > > + querytype = virQEMUQAPISchemaTypeFromObject(obj); > > + } > > > > - if (!(curtype = virHashLookup(schema, baseName))) > > The object-specific code lost the > if (!querytype) > return 0; > condition It is not necessary as virHashLookup returns NULL if @name is NULL and it's called right as the first thing in virQEMUQAPISchemaTraverse which is called from virQEMUQAPISchemaTraverseObject. Dropping that part makes it work the same in all of the individual workers.
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list