From cbcee32350793f19060dea6488e64bc0bf6b402b Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Wed, 15 Aug 2018 08:32:04 +0200 Subject: [PATCH] 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 Reviewed-by: John Ferlan --- src/qemu/qemu_qapi.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_qapi.c b/src/qemu/qemu_qapi.c index d277ef1bde..fea6683336 100644 --- a/src/qemu/qemu_qapi.c +++ b/src/qemu/qemu_qapi.c @@ -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. *