This patch replaces repetitive blocks of code with a couple
of macros for the sake of clarity.
There are no changes in behaviour.
---
src/qemu/qemu_monitor_json.c | 129 ++++++++++++++++++-------------------------
1 file changed, 53 insertions(+), 76 deletions(-)
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 4810bd3..4fa72c9 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -1775,6 +1775,25 @@ int qemuMonitorJSONGetBlockStatsInfo(qemuMonitorPtr mon,
}
+#define QEMU_MONITOR_JSON_MALFORMED_ENTRY(kind) do { \
+ if (report) \
+ virReportError(VIR_ERR_INTERNAL_ERROR, \
+ _("blockstats %s entry was not " \
+ "in expected format"), \
+ kind); \
+ goto cleanup; \
+} while (0)
+
+
+#define QEMU_MONITOR_JSON_MISSING_STAT(statistic) do { \
+ if (report) \
+ virReportError(VIR_ERR_INTERNAL_ERROR, \
+ _("cannot read %s statistic"), \
+ statistic); \
+ goto cleanup; \
+} while (0)
+
+
int qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitorPtr mon,
const char *dev_name,
qemuBlockStatsPtr bstats,
@@ -1814,26 +1833,16 @@ int qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitorPtr mon,
for (i = 0; i < virJSONValueArraySize(devices) && count < nstats; i++)
{
virJSONValuePtr dev = virJSONValueArrayGet(devices, i);
virJSONValuePtr stats;
- if (!dev || dev->type != VIR_JSON_TYPE_OBJECT) {
- if (report)
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("blockstats device entry was not "
- "in expected format"));
- goto cleanup;
- }
+ if (!dev || dev->type != VIR_JSON_TYPE_OBJECT)
+ QEMU_MONITOR_JSON_MALFORMED_ENTRY("device");
/* If dev_name is specified, we are looking for a specific device,
* so we must be stricter.
*/
if (dev_name) {
const char *thisdev = virJSONValueObjectGetString(dev, "device");
- if (!thisdev) {
- if (report)
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("blockstats device entry was not "
- "in expected format"));
- goto cleanup;
- }
+ if (!thisdev)
+ QEMU_MONITOR_JSON_MALFORMED_ENTRY("device");
/* New QEMU has separate names for host & guest side of the disk
* and libvirt gives the host side a 'drive-' prefix. The passed
@@ -1847,81 +1856,44 @@ int qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitorPtr mon,
}
if ((stats = virJSONValueObjectGet(dev, "stats")) == NULL ||
- stats->type != VIR_JSON_TYPE_OBJECT) {
- if (report)
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("blockstats stats entry was not "
- "in expected format"));
- goto cleanup;
- }
+ stats->type != VIR_JSON_TYPE_OBJECT)
+ QEMU_MONITOR_JSON_MALFORMED_ENTRY("stats");
if (virJSONValueObjectGetNumberLong(stats, "rd_bytes",
- &bstats->rd_bytes) < 0) {
- if (report)
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("cannot read %s statistic"),
- "rd_bytes");
- goto cleanup;
- }
+ &bstats->rd_bytes) < 0)
+ QEMU_MONITOR_JSON_MISSING_STAT("rd_bytes");
+
if (virJSONValueObjectGetNumberLong(stats, "rd_operations",
- &bstats->rd_req) < 0) {
- if (report)
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("cannot read %s statistic"),
- "rd_operations");
- goto cleanup;
- }
+ &bstats->rd_req) < 0)
+ QEMU_MONITOR_JSON_MISSING_STAT("rd_operations");
+
if (virJSONValueObjectHasKey(stats, "rd_total_time_ns") &&
(virJSONValueObjectGetNumberLong(stats, "rd_total_time_ns",
- &bstats->rd_total_times) < 0)) {
- if (report)
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("cannot read %s statistic"),
- "rd_total_time_ns");
- goto cleanup;
- }
+ &bstats->rd_total_times) < 0))
+ QEMU_MONITOR_JSON_MISSING_STAT("rd_total_time_ns");
+
if (virJSONValueObjectGetNumberLong(stats, "wr_bytes",
- &bstats->wr_bytes) < 0) {
- if (report)
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("cannot read %s statistic"),
- "wr_bytes");
- goto cleanup;
- }
+ &bstats->wr_bytes) < 0)
+ QEMU_MONITOR_JSON_MISSING_STAT("wr_bytes");
+
if (virJSONValueObjectGetNumberLong(stats, "wr_operations",
- &bstats->wr_req) < 0) {
- if (report)
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("cannot read %s statistic"),
- "wr_operations");
- goto cleanup;
- }
+ &bstats->wr_req) < 0)
+ QEMU_MONITOR_JSON_MISSING_STAT("wr_operations");
+
if (virJSONValueObjectHasKey(stats, "wr_total_time_ns") &&
(virJSONValueObjectGetNumberLong(stats, "wr_total_time_ns",
- &bstats->wr_total_times) < 0)) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("cannot read %s statistic"),
- "wr_total_time_ns");
- goto cleanup;
- }
+ &bstats->wr_total_times) < 0))
+ QEMU_MONITOR_JSON_MISSING_STAT("wr_total_time_ns");
+
if (virJSONValueObjectHasKey(stats, "flush_operations") &&
(virJSONValueObjectGetNumberLong(stats, "flush_operations",
- &bstats->flush_req) < 0)) {
- if (report)
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("cannot read %s statistic"),
- "flush_operations");
- goto cleanup;
- }
+ &bstats->flush_req) < 0))
+ QEMU_MONITOR_JSON_MISSING_STAT("flush_operations");
+
if (virJSONValueObjectHasKey(stats, "flush_total_time_ns") &&
(virJSONValueObjectGetNumberLong(stats, "flush_total_time_ns",
- &bstats->flush_total_times) < 0))
{
- if (report)
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("cannot read %s statistic"),
- "flush_total_time_ns");
- goto cleanup;
- }
+ &bstats->flush_total_times) < 0))
+ QEMU_MONITOR_JSON_MISSING_STAT("flush_total_time_ns");
count++;
bstats++;
@@ -1947,6 +1919,11 @@ int qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitorPtr mon,
}
+#undef QEMU_MONITOR_JSON_MISSING_STAT
+
+#undef QEMU_MONITOR_JSON_MALFORMED_ENTRY
+
+
int qemuMonitorJSONGetBlockStatsParamsNumber(qemuMonitorPtr mon,
int *nparams)
{
--
1.9.3