]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virQEMUQAPISchemaTraverseEnum: Use the modern 'members' array
authorPeter Krempa <pkrempa@redhat.com>
Fri, 17 Sep 2021 14:13:49 +0000 (16:13 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 1 Nov 2021 16:37:15 +0000 (17:37 +0100)
Starting from QEMU-6.2 enum members are reported as an array of objects
under new name "values" so that extra data can be reported for each
member.

Modify the code so that we prefer 'members' and skip 'values' completely
if we've used 'members'.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_qapi.c

index 165ecf118024d2bbe6ea6c12844d48b6e3ffe196..790f7c0fee2146c5f292eb36f84c16b2ba06137a 100644 (file)
@@ -243,6 +243,7 @@ virQEMUQAPISchemaTraverseEnum(virJSONValue *cur,
 {
     const char *query = virQEMUQAPISchemaTraverseContextNextQuery(ctxt);
     virJSONValue *values;
+    virJSONValue *members;
     size_t i;
 
     if (query[0] != '^')
@@ -253,6 +254,22 @@ virQEMUQAPISchemaTraverseEnum(virJSONValue *cur,
 
     query++;
 
+    /* qemu-6.2 added a "members" array superseding "values" */
+    if ((members = virJSONValueObjectGetArray(cur, "members"))) {
+        for (i = 0; i < virJSONValueArraySize(members); i++) {
+            virJSONValue *member = virJSONValueArrayGet(members, i);
+            const char *name;
+
+            if (!member || !(name = virJSONValueObjectGetString(member, "name")))
+                return -2;
+
+            if (STREQ(name, query))
+                return 1;
+        }
+
+        return 0;
+    }
+
     if (!(values = virJSONValueObjectGetArray(cur, "values")))
         return -2;