Reduce some cut-n-paste code by creating common helper
NB: This also adds error checking to qemuMonitorJSONDiskNameLookup
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/qemu/qemu_monitor_json.c | 63 ++++++++++++++++++++++++--------------------
1 file changed, 34 insertions(+), 29 deletions(-)
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index e1494df..4af98cc 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -1772,26 +1772,46 @@ qemuMonitorJSONSetMemoryStatsPeriod(qemuMonitorPtr mon,
}
+/* qemuMonitorJSONQueryBlock:
+ * @mon: Monitor pointer
+ *
+ * This helper will attempt to make a "query-block" call and check for
+ * errors before returning with the reply.
+ *
+ * Returns: NULL on error, reply on success
+ */
+static virJSONValuePtr
+qemuMonitorJSONQueryBlock(qemuMonitorPtr mon)
+{
+ virJSONValuePtr cmd;
+ virJSONValuePtr reply = NULL;
+
+ if (!(cmd = qemuMonitorJSONMakeCommand("query-block", NULL)))
+ return NULL;
+
+ if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0 ||
+ qemuMonitorJSONCheckError(cmd, reply) < 0) {
+ virJSONValueFree(reply);
+ reply = NULL;
+ }
+
+ virJSONValueFree(cmd);
+ return reply;
+}
+
+
int qemuMonitorJSONGetBlockInfo(qemuMonitorPtr mon,
virHashTablePtr table)
{
int ret = -1;
size_t i;
- virJSONValuePtr cmd = qemuMonitorJSONMakeCommand("query-block",
- NULL);
- virJSONValuePtr reply = NULL;
+ virJSONValuePtr reply;
virJSONValuePtr devices;
- if (!cmd)
+ if (!(reply = qemuMonitorJSONQueryBlock(mon)))
return -1;
- if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
- goto cleanup;
-
- if (qemuMonitorJSONCheckError(cmd, reply) < 0)
- goto cleanup;
-
if (!(devices = virJSONValueObjectGetArray(reply, "return"))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("block info reply was missing device list"));
@@ -1858,7 +1878,6 @@ int qemuMonitorJSONGetBlockInfo(qemuMonitorPtr mon,
ret = 0;
cleanup:
- virJSONValueFree(cmd);
virJSONValueFree(reply);
return ret;
}
@@ -2056,21 +2075,13 @@ qemuMonitorJSONBlockStatsUpdateCapacity(qemuMonitorPtr mon,
bool backingChain)
{
int ret = -1;
- int rc;
size_t i;
- virJSONValuePtr cmd;
- virJSONValuePtr reply = NULL;
+ virJSONValuePtr reply;
virJSONValuePtr devices;
- if (!(cmd = qemuMonitorJSONMakeCommand("query-block", NULL)))
+ if (!(reply = qemuMonitorJSONQueryBlock(mon)))
return -1;
- if ((rc = qemuMonitorJSONCommand(mon, cmd, &reply)) < 0)
- goto cleanup;
-
- if (qemuMonitorJSONCheckError(cmd, reply) < 0)
- goto cleanup;
-
if (!(devices = virJSONValueObjectGetArray(reply, "return"))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("query-block reply was missing device list"));
@@ -2111,7 +2122,6 @@ qemuMonitorJSONBlockStatsUpdateCapacity(qemuMonitorPtr mon,
ret = 0;
cleanup:
- virJSONValueFree(cmd);
virJSONValueFree(reply);
return ret;
}
@@ -3987,16 +3997,12 @@ qemuMonitorJSONDiskNameLookup(qemuMonitorPtr mon,
virStorageSourcePtr target)
{
char *ret = NULL;
- virJSONValuePtr cmd = NULL;
- virJSONValuePtr reply = NULL;
+ virJSONValuePtr reply;
virJSONValuePtr devices;
size_t i;
- cmd = qemuMonitorJSONMakeCommand("query-block", NULL);
- if (!cmd)
+ if (!(reply = qemuMonitorJSONQueryBlock(mon)))
return NULL;
- if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
- goto cleanup;
if (!(devices = virJSONValueObjectGetArray(reply, "return"))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -4038,7 +4044,6 @@ qemuMonitorJSONDiskNameLookup(qemuMonitorPtr mon,
device);
cleanup:
- virJSONValueFree(cmd);
virJSONValueFree(reply);
return ret;
--
2.7.4