mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-01 17:35:17 +00:00
qemu: qapi: Simplify value handling in virQEMUQAPISchemaTraverse
Introduce a few variables so that we can easily access the modifier character and also don't have to do pointer arithmetic when selecting the schema entries. This will simplify adding of new modifier characters. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
b04d1b6a35
commit
cbcee32350
@ -25,6 +25,8 @@
|
||||
#include "virerror.h"
|
||||
#include "virlog.h"
|
||||
|
||||
#include "c-ctype.h"
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_QEMU
|
||||
|
||||
VIR_LOG_INIT("qemu.qemu_qapi");
|
||||
@ -75,6 +77,8 @@ virQEMUQAPISchemaTraverse(const char *baseName,
|
||||
{
|
||||
virJSONValuePtr base;
|
||||
const char *metatype;
|
||||
const char *querystr;
|
||||
char modifier;
|
||||
|
||||
while (1) {
|
||||
if (!(base = virHashLookup(schema, baseName)))
|
||||
@ -93,13 +97,19 @@ virQEMUQAPISchemaTraverse(const char *baseName,
|
||||
|
||||
continue;
|
||||
} else if (STREQ(metatype, "object")) {
|
||||
if (**query == '+')
|
||||
querystr = *query;
|
||||
modifier = **query;
|
||||
|
||||
if (!c_isalpha(modifier))
|
||||
querystr++;
|
||||
|
||||
if (modifier == '+')
|
||||
baseName = virQEMUQAPISchemaObjectGetType("variants",
|
||||
*query + 1,
|
||||
querystr,
|
||||
"case", base);
|
||||
else
|
||||
baseName = virQEMUQAPISchemaObjectGetType("members",
|
||||
*query,
|
||||
querystr,
|
||||
"name", base);
|
||||
|
||||
if (!baseName)
|
||||
@ -139,6 +149,9 @@ virQEMUQAPISchemaTraverse(const char *baseName,
|
||||
* +variant_discriminator: In the case of unionized objects, select a
|
||||
* specific case to introspect.
|
||||
*
|
||||
* If the name of any (sub)attribute starts with non-alphabetical symbols it
|
||||
* needs to be prefixed by a single space.
|
||||
*
|
||||
* Array types are automatically flattened to the singular type. Alternate
|
||||
* types are currently not supported.
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user