]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemuMonitorJSONQueryStats: Simplify logic to construct 'provider_list'
authorPeter Krempa <pkrempa@redhat.com>
Wed, 9 Nov 2022 15:59:25 +0000 (16:59 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 6 Feb 2023 12:34:06 +0000 (13:34 +0100)
Simplify construction of a single provider by using
virJSONValueObjectAdd and restructuring the code.

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

index db990175554600eeee98ecb96d58a2b13932e767..01e2aaa2cfe57b69095da994be944eb5bd32ad8b 100644 (file)
@@ -8828,36 +8828,32 @@ qemuMonitorJSONQueryStats(qemuMonitor *mon,
     g_autoptr(virJSONValue) reply = NULL;
     g_autoptr(virJSONValue) vcpu_list = NULL;
     g_autoptr(virJSONValue) provider_list = NULL;
-
     size_t i;
 
     if (providers) {
         provider_list = virJSONValueNewArray();
 
         for (i = 0; i < providers->len; i++) {
-            g_autoptr(virJSONValue) provider_obj = virJSONValueNewObject();
             qemuMonitorQueryStatsProvider *provider = providers->pdata[i];
-            const char *type_str = qemuMonitorQueryStatsProviderTypeToString(provider->type);
-            virBitmap *names = provider->names;
-
-            if (virJSONValueObjectAppendString(provider_obj, "provider", type_str) < 0)
-                return NULL;
-
-            if (!virBitmapIsAllClear(names)) {
-                g_autoptr(virJSONValue) provider_names = virJSONValueNewArray();
-                ssize_t curBit = -1;
+            g_autoptr(virJSONValue) provider_obj = NULL;
+            g_autoptr(virJSONValue) provider_names = NULL;
+            ssize_t curBit = -1;
 
-                while ((curBit = virBitmapNextSetBit(names, curBit)) != -1) {
-                    const char *name = qemuMonitorQueryStatsNameTypeToString(curBit);
+            while ((curBit = virBitmapNextSetBit(provider->names, curBit)) != -1) {
+                if (!provider_names)
+                    provider_names = virJSONValueNewArray();
 
-                    if (virJSONValueArrayAppendString(provider_names, name) < 0)
-                        return NULL;
-                }
-
-                if (virJSONValueObjectAppend(provider_obj, "names", &provider_names) < 0)
+                if (virJSONValueArrayAppendString(provider_names,
+                                                  qemuMonitorQueryStatsNameTypeToString(curBit)) < 0)
                     return NULL;
             }
 
+            if (virJSONValueObjectAdd(&provider_obj,
+                                      "s:provider", qemuMonitorQueryStatsProviderTypeToString(provider->type),
+                                      "A:names", &provider_names,
+                                      NULL) < 0)
+                return NULL;
+
             if (virJSONValueArrayAppend(provider_list, &provider_obj) < 0)
                 return NULL;
         }