New function qemuMonitorJSONBuildCPUModelInfo created by extracting code
from existing function qemuMonitorJSONGetCPUModelExpansion to create a
reusable function for extracting cpu model info from json.
---
src/qemu/qemu_monitor_json.c | 82 ++++++++++++++++++++++++++++++--------------
1 file changed, 56 insertions(+), 26 deletions(-)
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 57c2c4de0..cf31c16a0 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -5337,6 +5337,61 @@ qemuMonitorJSONParseCPUModelProperty(const char *key,
return 0;
}
+// model_json: {"model": {"name": "IvyBridge",
"props": {}}}
+static int
+qemuMonitorJSONBuildCPUModelInfo(virJSONValuePtr model_json,
+ qemuMonitorCPUModelInfoPtr *model)
+{
+ virJSONValuePtr cpu_model;
+ virJSONValuePtr cpu_props;
+ qemuMonitorCPUModelInfoPtr machine_model = NULL;
+ int ret = -1;
+ char const *cpu_name;
+
+ *model = NULL;
+
+ if (!(cpu_model = virJSONValueObjectGetObject(model_json, "model"))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("query-cpu-model-expansion reply data was missing
'model'"));
+ goto cleanup;
+ }
+
+ if (!(cpu_name = virJSONValueObjectGetString(cpu_model, "name"))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("query-cpu-model-expansion reply data was missing
'name'"));
+ goto cleanup;
+ }
+
+ if (!(cpu_props = virJSONValueObjectGetObject(cpu_model, "props"))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("query-cpu-model-expansion reply data was missing
'props'"));
+ goto cleanup;
+ }
+
+ if (VIR_ALLOC(machine_model) < 0)
+ goto cleanup;
+
+ if (VIR_STRDUP(machine_model->name, cpu_name) < 0)
+ goto cleanup;
+
+ if (VIR_ALLOC_N(machine_model->props, virJSONValueObjectKeysNumber(cpu_props))
< 0)
+ goto cleanup;
+
+ if (virJSONValueObjectForeachKeyValue(cpu_props,
+ qemuMonitorJSONParseCPUModelProperty,
+ machine_model) < 0)
+ goto cleanup;
+
+ ret = 0;
+ *model = machine_model;
+ machine_model = NULL;
+
+ cleanup:
+ qemuMonitorCPUModelInfoFree(machine_model);
+
+ return ret;
+}
+
int
qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
qemuMonitorCPUModelExpansionType type,
@@ -5351,9 +5406,7 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
virJSONValuePtr reply = NULL;
virJSONValuePtr data;
virJSONValuePtr cpu_model;
- virJSONValuePtr cpu_props;
qemuMonitorCPUModelInfoPtr machine_model = NULL;
- char const *cpu_name;
const char *typeStr = "";
*model_info = NULL;
@@ -5426,30 +5479,7 @@ qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
goto retry;
}
- if (!(cpu_name = virJSONValueObjectGetString(cpu_model, "name"))) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("query-cpu-model-expansion reply data was missing
'name'"));
- goto cleanup;
- }
-
- if (!(cpu_props = virJSONValueObjectGetObject(cpu_model, "props"))) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("query-cpu-model-expansion reply data was missing
'props'"));
- goto cleanup;
- }
-
- if (VIR_ALLOC(machine_model) < 0)
- goto cleanup;
-
- if (VIR_STRDUP(machine_model->name, cpu_name) < 0)
- goto cleanup;
-
- if (VIR_ALLOC_N(machine_model->props, virJSONValueObjectKeysNumber(cpu_props))
< 0)
- goto cleanup;
-
- if (virJSONValueObjectForeachKeyValue(cpu_props,
- qemuMonitorJSONParseCPUModelProperty,
- machine_model) < 0)
+ if (qemuMonitorJSONBuildCPUModelInfo(data, &machine_model) < 0)
goto cleanup;
ret = 0;
--
2.14.1