[libvirt] [PATCH 04/11] qemu: monitor: Move processing of QMP schema to the new file

2018-03-22 Thread Peter Krempa
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 
---
 src/qemu/qemu_capabilities.c |  9 ++--
 src/qemu/qemu_monitor.c  |  2 +-
 src/qemu/qemu_monitor.h  |  2 +-
 src/qemu/qemu_monitor_json.c | 41 +---
 src/qemu/qemu_monitor_json.h |  2 +-
 src/qemu/qemu_qapi.c | 50 
 src/qemu/qemu_qapi.h |  4 
 7 files changed, 69 insertions(+), 41 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index a6170c66f2..16f7c7d6c9 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -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;

diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index 1d67a97789..e169553b7e 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -4316,7 +4316,7 @@ qemuMonitorGetRTCTime(qemuMonitorPtr mon,
 }


-virHashTablePtr
+virJSONValuePtr
 qemuMonitorQueryQMPSchema(qemuMonitorPtr mon)
 {
 QEMU_CHECK_MONITOR_JSON_NULL(mon);
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index adfa87aba9..7a22323504 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -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,
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 08dfffdf64..d80c4f18d1 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -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;
 }
diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
index ec243becc4..846d366b27 100644
--- a/src/qemu/qemu_monitor_json.h
+++ b/src/qemu/qemu_monitor_json.h
@@ -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,
diff --git a/src/qemu/qemu_qapi.c b/src/qemu/qemu_qapi.c
index 0a18764ac1..e63896397f 100644
--- a/src/qemu/qemu_qap

Re: [libvirt] [PATCH 04/11] qemu: monitor: Move processing of QMP schema to the new file

2018-03-22 Thread Ján Tomko

On Thu, Mar 22, 2018 at 07:31:41PM +0100, Peter Krempa wrote:

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 
---
src/qemu/qemu_capabilities.c |  9 ++--
src/qemu/qemu_monitor.c  |  2 +-
src/qemu/qemu_monitor.h  |  2 +-
src/qemu/qemu_monitor_json.c | 41 +---
src/qemu/qemu_monitor_json.h |  2 +-
src/qemu/qemu_qapi.c | 50 
src/qemu/qemu_qapi.h |  4 
7 files changed, 69 insertions(+), 41 deletions(-)



ACK

Jan


signature.asc
Description: Digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list