]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuMonitorJSONGetCPUDefinitions: Rework lookup of 'unavailable-features'
authorPeter Krempa <pkrempa@redhat.com>
Thu, 1 Dec 2022 15:13:05 +0000 (16:13 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 2 Dec 2022 15:18:37 +0000 (16:18 +0100)
Rather than checking that the object has the correct key and then
fetching it again use fetch the array first and then use
virJSONValueArrayToStringList to directly convert it.

Additionally we can avoid the conversion if there are no members
simplifying the surrounding logic.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_monitor_json.c

index a5800e182ce33ec4bc3549899017de39331176c1..cbd1eb6eec2dce1cffa07ecfd8211c1fa9ad592a 100644 (file)
@@ -4841,6 +4841,7 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitor *mon,
         virJSONValue *child = virJSONValueArrayGet(data, i);
         const char *tmp;
         qemuMonitorCPUDefInfo *cpu = defs->cpus + i;
+        virJSONValue *feat;
 
         if (!(tmp = virJSONValueObjectGetString(child, "name"))) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -4853,16 +4854,14 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitor *mon,
         if ((tmp = virJSONValueObjectGetString(child, "typename")) && *tmp)
             cpu->type = g_strdup(tmp);
 
-        if (virJSONValueObjectHasKey(child, "unavailable-features")) {
-            if (!(cpu->blockers = virJSONValueObjectGetStringArray(child,
-                                                                   "unavailable-features")))
-                return -1;
+        if ((feat = virJSONValueObjectGetArray(child, "unavailable-features"))) {
+            if (virJSONValueArraySize(feat) > 0) {
+                if (!(cpu->blockers = virJSONValueArrayToStringList(feat)))
+                    return -1;
 
-            if (g_strv_length(cpu->blockers) == 0) {
-                cpu->usable = VIR_DOMCAPS_CPU_USABLE_YES;
-                g_clear_pointer(&cpu->blockers, g_strfreev);
-            } else {
                 cpu->usable = VIR_DOMCAPS_CPU_USABLE_NO;
+            } else {
+                cpu->usable = VIR_DOMCAPS_CPU_USABLE_YES;
             }
         }