mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-10-20 13:09:22 +00:00
qemu: Use g_autofree in virQEMUCapsLoadCPUModels
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
ffcb39cbc1
commit
7f091cb6ed
@ -3464,15 +3464,10 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps,
|
|||||||
virDomainVirtType type)
|
virDomainVirtType type)
|
||||||
{
|
{
|
||||||
virDomainCapsCPUModelsPtr cpus = NULL;
|
virDomainCapsCPUModelsPtr cpus = NULL;
|
||||||
xmlNodePtr *nodes = NULL;
|
g_autofree xmlNodePtr * nodes = NULL;
|
||||||
char *str = NULL;
|
|
||||||
size_t i;
|
size_t i;
|
||||||
int n;
|
int n;
|
||||||
int ret = -1;
|
|
||||||
xmlNodePtr node;
|
xmlNodePtr node;
|
||||||
xmlNodePtr *blockerNodes = NULL;
|
|
||||||
char **blockers = NULL;
|
|
||||||
int nblockers;
|
|
||||||
|
|
||||||
if (type == VIR_DOMAIN_VIRT_KVM)
|
if (type == VIR_DOMAIN_VIRT_KVM)
|
||||||
n = virXPathNodeSet("./cpu[@type='kvm']", ctxt, &nodes);
|
n = virXPathNodeSet("./cpu[@type='kvm']", ctxt, &nodes);
|
||||||
@ -3482,16 +3477,14 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps,
|
|||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
_("failed to parse qemu capabilities cpus"));
|
_("failed to parse qemu capabilities cpus"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n == 0) {
|
if (n == 0)
|
||||||
ret = 0;
|
return 0;
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(cpus = virDomainCapsCPUModelsNew(n)))
|
if (!(cpus = virDomainCapsCPUModelsNew(n)))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (type == VIR_DOMAIN_VIRT_KVM)
|
if (type == VIR_DOMAIN_VIRT_KVM)
|
||||||
qemuCaps->kvmCPUModels = cpus;
|
qemuCaps->kvmCPUModels = cpus;
|
||||||
@ -3500,19 +3493,24 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps,
|
|||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
int usable = VIR_DOMCAPS_CPU_USABLE_UNKNOWN;
|
int usable = VIR_DOMCAPS_CPU_USABLE_UNKNOWN;
|
||||||
|
g_autofree char * strUsable = NULL;
|
||||||
|
g_autofree char * name = NULL;
|
||||||
|
g_autofree xmlNodePtr * blockerNodes = NULL;
|
||||||
|
VIR_AUTOSTRINGLIST blockers = NULL;
|
||||||
|
int nblockers;
|
||||||
|
|
||||||
if ((str = virXMLPropString(nodes[i], "usable")) &&
|
if ((strUsable = virXMLPropString(nodes[i], "usable")) &&
|
||||||
(usable = virDomainCapsCPUUsableTypeFromString(str)) < 0) {
|
(usable = virDomainCapsCPUUsableTypeFromString(strUsable)) < 0) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("unknown value '%s' in attribute 'usable'"), str);
|
_("unknown value '%s' in attribute 'usable'"),
|
||||||
goto cleanup;
|
strUsable);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
VIR_FREE(str);
|
|
||||||
|
|
||||||
if (!(str = virXMLPropString(nodes[i], "name"))) {
|
if (!(name = virXMLPropString(nodes[i], "name"))) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
_("missing cpu name in QEMU capabilities cache"));
|
_("missing cpu name in QEMU capabilities cache"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
node = ctxt->node;
|
node = ctxt->node;
|
||||||
@ -3523,38 +3521,30 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps,
|
|||||||
if (nblockers < 0) {
|
if (nblockers < 0) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
_("failed to parse CPU blockers in QEMU capabilities"));
|
_("failed to parse CPU blockers in QEMU capabilities"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nblockers > 0) {
|
if (nblockers > 0) {
|
||||||
size_t j;
|
size_t j;
|
||||||
|
|
||||||
if (VIR_ALLOC_N(blockers, nblockers + 1) < 0)
|
if (VIR_ALLOC_N(blockers, nblockers + 1) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
for (j = 0; j < nblockers; j++) {
|
for (j = 0; j < nblockers; j++) {
|
||||||
if (!(blockers[j] = virXMLPropString(blockerNodes[j], "name"))) {
|
if (!(blockers[j] = virXMLPropString(blockerNodes[j], "name"))) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
_("missing blocker name in QEMU "
|
_("missing blocker name in QEMU "
|
||||||
"capabilities cache"));
|
"capabilities cache"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
VIR_FREE(blockerNodes);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (virDomainCapsCPUModelsAddSteal(cpus, &str, usable, &blockers) < 0)
|
if (virDomainCapsCPUModelsAddSteal(cpus, &name, usable, &blockers) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
VIR_FREE(nodes);
|
|
||||||
VIR_FREE(str);
|
|
||||||
VIR_FREE(blockerNodes);
|
|
||||||
virStringListFree(blockers);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user