[libvirt] [PATCH v2 01/10] qemu: qapi: Simplify value handling in virQEMUQAPISchemaTraverse

Peter Krempa posted 10 patches 5 years, 10 months ago
[libvirt] [PATCH v2 01/10] qemu: qapi: Simplify value handling in virQEMUQAPISchemaTraverse
Posted by Peter Krempa 5 years, 10 months ago
Introduce a few variables so that we can easily access the modifier
character and also don't have to do pointer aritmetics when selecting
the schema entries. This will simplify adding of new modifier
characters.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 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.
  *
-- 
2.16.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2 01/10] qemu: qapi: Simplify value handling in virQEMUQAPISchemaTraverse
Posted by John Ferlan 5 years, 9 months ago

On 08/15/2018 05:18 AM, Peter Krempa wrote:
> Introduce a few variables so that we can easily access the modifier
> character and also don't have to do pointer aritmetics when selecting

arithmetic

> the schema entries. This will simplify adding of new modifier
> characters.
> 
> Signed-off-by: Peter Krempa <pkrempa@redhat.com>
> ---
>  src/qemu/qemu_qapi.c | 19 ++++++++++++++++---
>  1 file changed, 16 insertions(+), 3 deletions(-)
> 

Reviewed-by: John Ferlan <jferlan@redhat.com>

John

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list