From: Peter Krempa Date: Tue, 9 Apr 2019 11:25:49 +0000 (+0200) Subject: qemu: qapi: Return schema entry via argument in virQEMUQAPISchemaTraverse X-Git-Tag: v5.4.0-rc1~141 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9da894dea732e48e8cf82ce0bd421dc9587fc364;p=thirdparty%2Flibvirt.git qemu: qapi: Return schema entry via argument in virQEMUQAPISchemaTraverse To allow for boolean query string, let's return the queried schema entry via argument rather than a return value. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_qapi.c b/src/qemu/qemu_qapi.c index de663d4408..7155f2d084 100644 --- a/src/qemu/qemu_qapi.c +++ b/src/qemu/qemu_qapi.c @@ -101,10 +101,11 @@ virQEMUQAPISchemaObjectGetType(const char *field, } -static virJSONValuePtr +static int virQEMUQAPISchemaTraverse(const char *baseName, char **query, - virHashTablePtr schema) + virHashTablePtr schema, + virJSONValuePtr *type) { virJSONValuePtr base; virJSONValuePtr obj; @@ -114,18 +115,20 @@ virQEMUQAPISchemaTraverse(const char *baseName, while (1) { if (!(base = virHashLookup(schema, baseName))) - return NULL; + return 0; - if (!*query) - return base; + if (!*query) { + *type = base; + return 0; + } if (!(metatype = virJSONValueObjectGetString(base, "meta-type"))) - return NULL; + return 0; /* flatten arrays by default */ if (STREQ(metatype, "array")) { if (!(baseName = virJSONValueObjectGetString(base, "element-type"))) - return NULL; + return 0; continue; } else if (STREQ(metatype, "object")) { @@ -145,26 +148,26 @@ virQEMUQAPISchemaTraverse(const char *baseName, if (modifier == '*' && !virJSONValueObjectHasKey(obj, "default")) - return NULL; + return 0; baseName = virQEMUQAPISchemaTypeFromObject(obj); } if (!baseName) - return NULL; + return 0; } else if (STREQ(metatype, "command") || STREQ(metatype, "event")) { if (!(baseName = virJSONValueObjectGetString(base, *query))) - return NULL; + return 0; } else { /* alternates, basic types and enums can't be entered */ - return NULL; + return 0; } query++; } - return NULL; + return 0; } @@ -219,7 +222,8 @@ virQEMUQAPISchemaPathGet(const char *query, return -1; } - *entry = virQEMUQAPISchemaTraverse(*elems, elems + 1, schema); + if (virQEMUQAPISchemaTraverse(elems[0], elems + 1, schema, entry) < 0) + return -1; return 0; }