]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: monitor: Move processing of QMP schema to the new file
authorPeter Krempa <pkrempa@redhat.com>
Tue, 20 Mar 2018 08:29:30 +0000 (09:29 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 23 Mar 2018 13:52:07 +0000 (14:52 +0100)
The JSON array was processed to the hash table used by the query apis in
the monitor code. Move it to a new helper in qemu_qapi.c.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
src/qemu/qemu_capabilities.c
src/qemu/qemu_monitor.c
src/qemu/qemu_monitor.h
src/qemu/qemu_monitor_json.c
src/qemu/qemu_monitor_json.h
src/qemu/qemu_qapi.c
src/qemu/qemu_qapi.h

index 2c4a59bff426d394ce4ba1547f351bbe26838ead..7f40534732bbf55fbbccea71cd254391705c03de 100644 (file)
@@ -4570,12 +4570,17 @@ virQEMUCapsProbeQMPSchemaCapabilities(virQEMUCapsPtr qemuCaps,
                                       qemuMonitorPtr mon)
 {
     struct virQEMUCapsStringFlags *entry;
-    virHashTablePtr schema;
+    virJSONValuePtr schemareply;
+    virHashTablePtr schema = NULL;
     size_t i;
 
-    if (!(schema = qemuMonitorQueryQMPSchema(mon)))
+    if (!(schemareply = qemuMonitorQueryQMPSchema(mon)))
         return -1;
 
+    if (!(schema = virQEMUQAPISchemaConvert(schemareply)))
+        return -1;
+    schemareply = NULL;
+
     for (i = 0; i < ARRAY_CARDINALITY(virQEMUCapsQMPSchemaQueries); i++) {
         entry = virQEMUCapsQMPSchemaQueries + i;
 
index 1d67a97789e76d7f53d492bd36f0dd67e3ecde98..e169553b7e1781da307ddb0be23fed5540baf36c 100644 (file)
@@ -4316,7 +4316,7 @@ qemuMonitorGetRTCTime(qemuMonitorPtr mon,
 }
 
 
-virHashTablePtr
+virJSONValuePtr
 qemuMonitorQueryQMPSchema(qemuMonitorPtr mon)
 {
     QEMU_CHECK_MONITOR_JSON_NULL(mon);
index adfa87aba91ba252ef37026139fabdbf593c536e..7a223235042e26c885839dc5079174f3245ca8a7 100644 (file)
@@ -1175,7 +1175,7 @@ int qemuMonitorMigrateContinue(qemuMonitorPtr mon,
 int qemuMonitorGetRTCTime(qemuMonitorPtr mon,
                           struct tm *tm);
 
-virHashTablePtr qemuMonitorQueryQMPSchema(qemuMonitorPtr mon);
+virJSONValuePtr qemuMonitorQueryQMPSchema(qemuMonitorPtr mon);
 
 int qemuMonitorSetBlockThreshold(qemuMonitorPtr mon,
                                  const char *nodename,
index 08dfffdf6435222a48dc1f8155d3b9b5de42d7bd..d80c4f18d124eb71a2ca5edac45e615b8a832f59 100644 (file)
@@ -7776,35 +7776,12 @@ qemuMonitorJSONGetHotpluggableCPUs(qemuMonitorPtr mon,
 }
 
 
-static int
-qemuMonitorJSONFillQMPSchema(size_t pos ATTRIBUTE_UNUSED,
-                             virJSONValuePtr item,
-                             void *opaque)
-{
-    const char *name;
-    virHashTablePtr schema = opaque;
-
-    if (!(name = virJSONValueObjectGetString(item, "name"))) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("malformed QMP schema"));
-        return -1;
-    }
-
-    if (virHashAddEntry(schema, name, item) < 0)
-        return -1;
-
-    return 0;
-}
-
-
-virHashTablePtr
+virJSONValuePtr
 qemuMonitorJSONQueryQMPSchema(qemuMonitorPtr mon)
 {
     virJSONValuePtr cmd;
     virJSONValuePtr reply = NULL;
-    virJSONValuePtr arr;
-    virHashTablePtr schema = NULL;
-    virHashTablePtr ret = NULL;
+    virJSONValuePtr ret = NULL;
 
     if (!(cmd = qemuMonitorJSONMakeCommand("query-qmp-schema", NULL)))
         return NULL;
@@ -7815,21 +7792,13 @@ qemuMonitorJSONQueryQMPSchema(qemuMonitorPtr mon)
     if (qemuMonitorJSONCheckError(cmd, reply) < 0)
         goto cleanup;
 
-    arr = virJSONValueObjectGet(reply, "return");
-
-    if (!(schema = virHashCreate(512, virJSONValueHashFree)))
-        goto cleanup;
-
-    if (virJSONValueArrayForeachSteal(arr, qemuMonitorJSONFillQMPSchema,
-                                      schema) < 0)
-        goto cleanup;
-
-    VIR_STEAL_PTR(ret, schema);
+    if (!(ret = virJSONValueObjectStealArray(reply, "return")))
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("query-qmp-schema reply is not an array"));
 
  cleanup:
     virJSONValueFree(cmd);
     virJSONValueFree(reply);
-    virHashFree(schema);
 
     return ret;
 }
index ec243becc4ae3c6fa998a9ba6f1927335ae4e045..846d366b27a5de870e3ff89c34a24d64374e9306 100644 (file)
@@ -516,7 +516,7 @@ int qemuMonitorJSONGetHotpluggableCPUs(qemuMonitorPtr mon,
                                        size_t *nentries)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
 
-virHashTablePtr qemuMonitorJSONQueryQMPSchema(qemuMonitorPtr mon)
+virJSONValuePtr qemuMonitorJSONQueryQMPSchema(qemuMonitorPtr mon)
     ATTRIBUTE_NONNULL(1);
 
 int qemuMonitorJSONSetBlockThreshold(qemuMonitorPtr mon,
index 7970cdedc48b970834847c3f4e8d8a8d85324183..3cb0cf0139028b867b2ac268c2671d862f7a6cd7 100644 (file)
@@ -185,3 +185,53 @@ virQEMUQAPISchemaPathExists(const char *query,
 
     return !!entry;
 }
+
+static int
+virQEMUQAPISchemaEntryProcess(size_t pos ATTRIBUTE_UNUSED,
+                              virJSONValuePtr item,
+                              void *opaque)
+{
+    const char *name;
+    virHashTablePtr schema = opaque;
+
+    if (!(name = virJSONValueObjectGetString(item, "name"))) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("malformed QMP schema"));
+        return -1;
+    }
+
+    if (virHashAddEntry(schema, name, item) < 0)
+        return -1;
+
+    return 0;
+}
+
+
+/**
+ * virQEMUQAPISchemaConvert:
+ * @schemareply: Schema data as returned by the qemu monitor
+ *
+ * Converts the schema into the hash-table used by the functions working with
+ * the schema. @schemareply is consumed and freed.
+ */
+virHashTablePtr
+virQEMUQAPISchemaConvert(virJSONValuePtr schemareply)
+{
+    virHashTablePtr schema;
+    virHashTablePtr ret = NULL;
+
+    if (!(schema = virHashCreate(512, virJSONValueHashFree)))
+        goto cleanup;
+
+    if (virJSONValueArrayForeachSteal(schemareply,
+                                      virQEMUQAPISchemaEntryProcess,
+                                      schema) < 0)
+        goto cleanup;
+
+    VIR_STEAL_PTR(ret, schema);
+
+ cleanup:
+    virJSONValueFree(schemareply);
+    virHashFree(schema);
+    return ret;
+}
index 3695e5846c7502eeb338bcaab16131fae0a3becb..e074507dc89b8747952dfeb708210587b3c22f57 100644 (file)
@@ -33,4 +33,8 @@ bool
 virQEMUQAPISchemaPathExists(const char *query,
                             virHashTablePtr schema);
 
+virHashTablePtr
+virQEMUQAPISchemaConvert(virJSONValuePtr schemareply);
+
+
 #endif /* __QEMU_QAPI_H__ */