qemuMonitorJSONGetCPUDefinitions: Rework lookup of 'unavailable-features'

Rather than checking that the object has the correct key and then
fetching it again use fetch the array first and then use
virJSONValueArrayToStringList to directly convert it.

Additionally we can avoid the conversion if there are no members
simplifying the surrounding logic.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Peter Krempa 2022-12-01 16:13:05 +01:00
parent 3b576601df
commit 662ec854d2
1 changed files with 7 additions and 8 deletions

View File

@ -4841,6 +4841,7 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitor *mon,
virJSONValue *child = virJSONValueArrayGet(data, i);
const char *tmp;
qemuMonitorCPUDefInfo *cpu = defs->cpus + i;
virJSONValue *feat;
if (!(tmp = virJSONValueObjectGetString(child, "name"))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@ -4853,16 +4854,14 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitor *mon,
if ((tmp = virJSONValueObjectGetString(child, "typename")) && *tmp)
cpu->type = g_strdup(tmp);
if (virJSONValueObjectHasKey(child, "unavailable-features")) {
if (!(cpu->blockers = virJSONValueObjectGetStringArray(child,
"unavailable-features")))
return -1;
if ((feat = virJSONValueObjectGetArray(child, "unavailable-features"))) {
if (virJSONValueArraySize(feat) > 0) {
if (!(cpu->blockers = virJSONValueArrayToStringList(feat)))
return -1;
if (g_strv_length(cpu->blockers) == 0) {
cpu->usable = VIR_DOMCAPS_CPU_USABLE_YES;
g_clear_pointer(&cpu->blockers, g_strfreev);
} else {
cpu->usable = VIR_DOMCAPS_CPU_USABLE_NO;
} else {
cpu->usable = VIR_DOMCAPS_CPU_USABLE_YES;
}
}