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 [...]
} else if (STREQ(metatype, "object")) { - querystr = *query; - modifier = **query; - - if (!c_isalpha(modifier)) - querystr++; - - if (modifier == '+') { - querytype = virQEMUQAPISchemaObjectGetType("variants", - querystr, - "case", curtype); - } else { - obj = virQEMUQAPISchemaObjectGet("members", querystr, - "name", curtype); - - if (modifier == '*' && - !virJSONValueObjectHasKey(obj, "default")) - return 0; - - querytype = virQEMUQAPISchemaTypeFromObject(obj); - } - query++; + return virQEMUQAPISchemaTraverseObject(cur, query, schema, type); } else if (STREQ(metatype, "command") || STREQ(metatype, "event")) { - if (!(querytype = virJSONValueObjectGetString(curtype, *query))) - return 0; - query++; + return virQEMUQAPISchemaTraverseCommand(cur, query, schema, type); } else { /* alternates, basic types and enums can't be entered */ return 0; } - if (!querytype) - return 0; -
That was executed here. Reviewed-by: Ján Tomko <jtomko@xxxxxxxxxx> Jano
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list