virQEMUQAPISchemaTraverseEnum: Use the modern 'members' array

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>
This commit is contained in:
Peter Krempa 2021-09-17 16:13:49 +02:00
parent ce07b86008
commit 2827c411c2

View 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;