[PATCH 06/14] qemu: Parse properties list from any JSON array

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Jiri Denemark <jdenemar@xxxxxxxxxx>

The qemuMonitorJSONParsePropsList API expected a QMP reply as an input.
By generalizing it to work on any JSON array, we can reuse the API even
for commands which return the array of properties nested in an object.

Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx>
---
 src/qemu/qemu_monitor_json.c | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index be7ad21eca..76118ea664 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -5848,28 +5848,23 @@ typedef int (*qemuMonitorJSONPropsListFilter)(const char *name,
                                               void *data);
 
 static int
-qemuMonitorJSONParsePropsList(virJSONValue *cmd,
-                              virJSONValue *reply,
+qemuMonitorJSONParsePropsList(virJSONValue *array,
                               qemuMonitorJSONPropsListFilter propFilter,
                               void *filterData,
                               char ***props)
 {
-    virJSONValue *data;
     g_auto(GStrv) proplist = NULL;
     size_t n = 0;
     size_t count = 0;
     size_t i;
 
-    if (!(data = qemuMonitorJSONGetReply(cmd, reply, VIR_JSON_TYPE_ARRAY)))
-        return -1;
-
-    n = virJSONValueArraySize(data);
+    n = virJSONValueArraySize(array);
 
     /* null-terminated list */
     proplist = g_new0(char *, n + 1);
 
     for (i = 0; i < n; i++) {
-        virJSONValue *child = virJSONValueArrayGet(data, i);
+        virJSONValue *child = virJSONValueArrayGet(array, i);
         const char *name = virJSONValueObjectGetString(child, "name");
 
         if (!name) {
@@ -5957,6 +5952,7 @@ qemuMonitorJSONGetObjectProps(qemuMonitor *mon,
 {
     g_autoptr(virJSONValue) cmd = NULL;
     g_autoptr(virJSONValue) reply = NULL;
+    virJSONValue *array;
 
     *props = NULL;
 
@@ -5971,7 +5967,10 @@ qemuMonitorJSONGetObjectProps(qemuMonitor *mon,
     if (qemuMonitorJSONHasError(reply, "DeviceNotFound"))
         return 0;
 
-    return qemuMonitorJSONParsePropsList(cmd, reply, NULL, NULL, props);
+    if (!(array = qemuMonitorJSONGetReply(cmd, reply, VIR_JSON_TYPE_ARRAY)))
+        return -1;
+
+    return qemuMonitorJSONParsePropsList(array, NULL, NULL, props);
 }
 
 
@@ -6629,6 +6628,7 @@ qemuMonitorJSONGetCPUProperties(qemuMonitor *mon,
 {
     g_autoptr(virJSONValue) cmd = NULL;
     g_autoptr(virJSONValue) reply = NULL;
+    virJSONValue *array;
     struct _qemuMonitorJSONCPUPropsFilterData filterData = {
         .mon = mon,
         .cpuQOMPath = cpuQOMPath,
@@ -6647,9 +6647,11 @@ qemuMonitorJSONGetCPUProperties(qemuMonitor *mon,
     if (qemuMonitorJSONHasError(reply, "DeviceNotFound"))
         return 0;
 
-    return qemuMonitorJSONParsePropsList(cmd, reply,
-                                         qemuMonitorJSONCPUPropsFilter, &filterData,
-                                         props);
+    if (!(array = qemuMonitorJSONGetReply(cmd, reply, VIR_JSON_TYPE_ARRAY)))
+        return -1;
+
+    return qemuMonitorJSONParsePropsList(array, qemuMonitorJSONCPUPropsFilter,
+                                         &filterData, props);
 }
 
 
-- 
2.51.0




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux