[libvirt] [PATCH 08/21] qemu: qapi: Separate virQEMUQAPISchemaTraverse into functions by object type
Ján Tomko
jtomko at redhat.com
Thu Apr 25 13:28:31 UTC 2019
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 at redhat.com>
>---
> 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 at redhat.com>
Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20190425/423c4726/attachment-0001.sig>
More information about the libvir-list
mailing list