[libvirt] [PATCH 00/19] qemu_command: use more of VIR_AUTO*

Ján Tomko (19): qemuBuildSerialChrDeviceStr: rename cmd to buf qemuBuildNumaArgStr: split variable declarations qemuBuildHotpluggableCPUProps: use VIR_RETURN_PTR qemuxml2xmltest: switch TPM tests to use latest caps qemu: move TPM vaildation to qemuDomainDeviceDefValidateTPM qemuBuildTPMBackendStr: format device and alias separately qemu_command: switch to VIR_AUTOCLEAN for virBuffer qemu_command: use VIR_AUTOPTR for virJSONValue qemu_command: use VIR_AUTOFREE for variables used once qemuBuildNetworkDriveURI: use VIR_AUTOPTR for virURI qemuBuildControllersByTypeCommandLine: use VIR_AUTOFREE qemuBuildRNGCommandLine: use VIR_AUTOFREE qemuBuildSmpCommandLine: use virCommandAddArgBuffer directly qemuBuildShmemCommandLine: add chardev variable qemuBuildShmemCommandLine: use VIR_AUTOFREE for devstr qemu_command: use VIR_AUTOUNREF qemu_command: remove unnecessary labels and ret variables qemuBuildCommandLine: use VIR_AUTO* qemuBuildCommandLine: remove unnecessary error label src/qemu/qemu_command.c | 1388 ++++++----------- src/qemu/qemu_domain.c | 29 +- ...> tpm-emulator-tpm2-enc.x86_64-latest.xml} | 4 +- ...ml => tpm-emulator-tpm2.x86_64-latest.xml} | 4 +- ...tor.xml => tpm-emulator.x86_64-latest.xml} | 4 +- ... => tpm-passthrough-crb.x86_64-latest.xml} | 4 +- ....xml => tpm-passthrough.x86_64-latest.xml} | 4 +- tests/qemuxml2xmltest.c | 10 +- 8 files changed, 545 insertions(+), 902 deletions(-) rename tests/qemuxml2xmloutdata/{tpm-emulator-tpm2-enc.xml => tpm-emulator-tpm2-enc.x86_64-latest.xml} (89%) rename tests/qemuxml2xmloutdata/{tpm-emulator-tpm2.xml => tpm-emulator-tpm2.x86_64-latest.xml} (89%) rename tests/qemuxml2xmloutdata/{tpm-emulator.xml => tpm-emulator.x86_64-latest.xml} (89%) rename tests/qemuxml2xmloutdata/{tpm-passthrough-crb.xml => tpm-passthrough-crb.x86_64-latest.xml} (89%) rename tests/qemuxml2xmloutdata/{tpm-passthrough.xml => tpm-passthrough.x86_64-latest.xml} (89%) -- 2.19.2

We usually use 'cmd' for a virCommand(Ptr) variable. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index e3f4ef624b..98516d2627 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10867,7 +10867,7 @@ qemuBuildSerialChrDeviceStr(char **deviceStr, virDomainChrDefPtr serial, virQEMUCapsPtr qemuCaps) { - virBuffer cmd = VIR_BUFFER_INITIALIZER; + virBuffer buf = VIR_BUFFER_INITIALIZER; virQEMUCapsFlags caps; switch ((virDomainChrSerialTargetModel) serial->targetModel) { @@ -10901,21 +10901,21 @@ qemuBuildSerialChrDeviceStr(char **deviceStr, goto error; } - virBufferAsprintf(&cmd, "%s,chardev=char%s,id=%s", + virBufferAsprintf(&buf, "%s,chardev=char%s,id=%s", virDomainChrSerialTargetModelTypeToString(serial->targetModel), serial->info.alias, serial->info.alias); - if (qemuBuildDeviceAddressStr(&cmd, def, &serial->info, qemuCaps) < 0) + if (qemuBuildDeviceAddressStr(&buf, def, &serial->info, qemuCaps) < 0) goto error; - if (virBufferCheckError(&cmd) < 0) + if (virBufferCheckError(&buf) < 0) goto error; - *deviceStr = virBufferContentAndReset(&cmd); + *deviceStr = virBufferContentAndReset(&buf); return 0; error: - virBufferFreeAndReset(&cmd); + virBufferFreeAndReset(&buf); return -1; } -- 2.19.2

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 98516d2627..1b5cde6ec7 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7881,7 +7881,9 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, size_t i, j; virQEMUCapsPtr qemuCaps = priv->qemuCaps; virBuffer buf = VIR_BUFFER_INITIALIZER; - char *cpumask = NULL, *tmpmask = NULL, *next = NULL; + char *cpumask = NULL; + char *tmpmask = NULL; + char *next = NULL; virBufferPtr nodeBackends = NULL; bool needBackend = false; int rc; -- 2.19.2

This lets us get rid of the error label. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 1b5cde6ec7..5e05916b23 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -11047,33 +11047,29 @@ virJSONValuePtr qemuBuildHotpluggableCPUProps(const virDomainVcpuDef *vcpu) { qemuDomainVcpuPrivatePtr vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpu); - virJSONValuePtr ret = NULL; + VIR_AUTOPTR(virJSONValue) ret = NULL; if (virJSONValueObjectCreate(&ret, "s:driver", vcpupriv->type, "s:id", vcpupriv->alias, NULL) < 0) - goto error; + return NULL; if (vcpupriv->socket_id != -1 && virJSONValueObjectAdd(ret, "i:socket-id", vcpupriv->socket_id, NULL) < 0) - goto error; + return NULL; if (vcpupriv->core_id != -1 && virJSONValueObjectAdd(ret, "i:core-id", vcpupriv->core_id, NULL) < 0) - goto error; + return NULL; if (vcpupriv->thread_id != -1 && virJSONValueObjectAdd(ret, "i:thread-id", vcpupriv->thread_id, NULL) < 0) - goto error; + return NULL; if (vcpupriv->node_id != -1 && virJSONValueObjectAdd(ret, "i:node-id", vcpupriv->node_id, NULL) < 0) - goto error; - - return ret; + return NULL; - error: - virJSONValueFree(ret); - return NULL; + VIR_RETURN_PTR(ret); } -- 2.19.2

In preparation to moving the validation to the parser, we need to supply the correct caps. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- ...enc.xml => tpm-emulator-tpm2-enc.x86_64-latest.xml} | 4 ++-- ...or-tpm2.xml => tpm-emulator-tpm2.x86_64-latest.xml} | 4 ++-- ...tpm-emulator.xml => tpm-emulator.x86_64-latest.xml} | 4 ++-- ...h-crb.xml => tpm-passthrough-crb.x86_64-latest.xml} | 4 ++-- ...ssthrough.xml => tpm-passthrough.x86_64-latest.xml} | 4 ++-- tests/qemuxml2xmltest.c | 10 +++++----- 6 files changed, 15 insertions(+), 15 deletions(-) rename tests/qemuxml2xmloutdata/{tpm-emulator-tpm2-enc.xml => tpm-emulator-tpm2-enc.x86_64-latest.xml} (89%) rename tests/qemuxml2xmloutdata/{tpm-emulator-tpm2.xml => tpm-emulator-tpm2.x86_64-latest.xml} (89%) rename tests/qemuxml2xmloutdata/{tpm-emulator.xml => tpm-emulator.x86_64-latest.xml} (89%) rename tests/qemuxml2xmloutdata/{tpm-passthrough-crb.xml => tpm-passthrough-crb.x86_64-latest.xml} (89%) rename tests/qemuxml2xmloutdata/{tpm-passthrough.xml => tpm-passthrough.x86_64-latest.xml} (89%) diff --git a/tests/qemuxml2xmloutdata/tpm-emulator-tpm2-enc.xml b/tests/qemuxml2xmloutdata/tpm-emulator-tpm2-enc.x86_64-latest.xml similarity index 89% rename from tests/qemuxml2xmloutdata/tpm-emulator-tpm2-enc.xml rename to tests/qemuxml2xmloutdata/tpm-emulator-tpm2-enc.x86_64-latest.xml index 8902725097..dcd504310f 100644 --- a/tests/qemuxml2xmloutdata/tpm-emulator-tpm2-enc.xml +++ b/tests/qemuxml2xmloutdata/tpm-emulator-tpm2-enc.x86_64-latest.xml @@ -18,7 +18,7 @@ <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu-system-x86_64</emulator> - <controller type='usb' index='0'> + <controller type='usb' index='0' model='piix3-uhci'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'/> @@ -30,7 +30,7 @@ </backend> </tpm> <memballoon model='virtio'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </memballoon> </devices> </domain> diff --git a/tests/qemuxml2xmloutdata/tpm-emulator-tpm2.xml b/tests/qemuxml2xmloutdata/tpm-emulator-tpm2.x86_64-latest.xml similarity index 89% rename from tests/qemuxml2xmloutdata/tpm-emulator-tpm2.xml rename to tests/qemuxml2xmloutdata/tpm-emulator-tpm2.x86_64-latest.xml index d30944c23d..625aaa5f60 100644 --- a/tests/qemuxml2xmloutdata/tpm-emulator-tpm2.xml +++ b/tests/qemuxml2xmloutdata/tpm-emulator-tpm2.x86_64-latest.xml @@ -18,7 +18,7 @@ <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu-system-x86_64</emulator> - <controller type='usb' index='0'> + <controller type='usb' index='0' model='piix3-uhci'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'/> @@ -28,7 +28,7 @@ <backend type='emulator' version='2.0'/> </tpm> <memballoon model='virtio'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </memballoon> </devices> </domain> diff --git a/tests/qemuxml2xmloutdata/tpm-emulator.xml b/tests/qemuxml2xmloutdata/tpm-emulator.x86_64-latest.xml similarity index 89% rename from tests/qemuxml2xmloutdata/tpm-emulator.xml rename to tests/qemuxml2xmloutdata/tpm-emulator.x86_64-latest.xml index ec33402499..002af76c21 100644 --- a/tests/qemuxml2xmloutdata/tpm-emulator.xml +++ b/tests/qemuxml2xmloutdata/tpm-emulator.x86_64-latest.xml @@ -18,7 +18,7 @@ <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu-system-x86_64</emulator> - <controller type='usb' index='0'> + <controller type='usb' index='0' model='piix3-uhci'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'/> @@ -28,7 +28,7 @@ <backend type='emulator' version='1.2'/> </tpm> <memballoon model='virtio'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </memballoon> </devices> </domain> diff --git a/tests/qemuxml2xmloutdata/tpm-passthrough-crb.xml b/tests/qemuxml2xmloutdata/tpm-passthrough-crb.x86_64-latest.xml similarity index 89% rename from tests/qemuxml2xmloutdata/tpm-passthrough-crb.xml rename to tests/qemuxml2xmloutdata/tpm-passthrough-crb.x86_64-latest.xml index 67ada46846..ef68c2d0d7 100644 --- a/tests/qemuxml2xmloutdata/tpm-passthrough-crb.xml +++ b/tests/qemuxml2xmloutdata/tpm-passthrough-crb.x86_64-latest.xml @@ -18,7 +18,7 @@ <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu-system-x86_64</emulator> - <controller type='usb' index='0'> + <controller type='usb' index='0' model='piix3-uhci'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'/> @@ -30,7 +30,7 @@ </backend> </tpm> <memballoon model='virtio'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </memballoon> </devices> </domain> diff --git a/tests/qemuxml2xmloutdata/tpm-passthrough.xml b/tests/qemuxml2xmloutdata/tpm-passthrough.x86_64-latest.xml similarity index 89% rename from tests/qemuxml2xmloutdata/tpm-passthrough.xml rename to tests/qemuxml2xmloutdata/tpm-passthrough.x86_64-latest.xml index 8f9eca054d..2a99f35cf8 100644 --- a/tests/qemuxml2xmloutdata/tpm-passthrough.xml +++ b/tests/qemuxml2xmloutdata/tpm-passthrough.x86_64-latest.xml @@ -18,7 +18,7 @@ <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu-system-x86_64</emulator> - <controller type='usb' index='0'> + <controller type='usb' index='0' model='piix3-uhci'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'/> @@ -30,7 +30,7 @@ </backend> </tpm> <memballoon model='virtio'> - <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </memballoon> </devices> </domain> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index d7850a89d3..e4e426c99b 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -664,11 +664,11 @@ mymain(void) DO_TEST("numad-auto-memory-vcpu-cpuset", NONE); DO_TEST("usb-ich9-ehci-addr", NONE); DO_TEST("disk-copy_on_read", NONE); - DO_TEST("tpm-passthrough", NONE); - DO_TEST("tpm-passthrough-crb", NONE); - DO_TEST("tpm-emulator", NONE); - DO_TEST("tpm-emulator-tpm2", NONE); - DO_TEST("tpm-emulator-tpm2-enc", NONE); + DO_TEST_CAPS_LATEST("tpm-passthrough"); + DO_TEST_CAPS_LATEST("tpm-passthrough-crb"); + DO_TEST_CAPS_LATEST("tpm-emulator"); + DO_TEST_CAPS_LATEST("tpm-emulator-tpm2"); + DO_TEST_CAPS_LATEST("tpm-emulator-tpm2-enc"); DO_TEST("metadata", NONE); DO_TEST("metadata-duplicate", NONE); -- 2.19.2

Simplify the command line formatter by complicating the validator. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 15 +-------------- src/qemu/qemu_domain.c | 29 +++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 5e05916b23..3a4acb3166 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10004,7 +10004,6 @@ qemuBuildTPMOpenBackendFDs(const char *tpmdev, static char * qemuBuildTPMBackendStr(const virDomainDef *def, virCommandPtr cmd, - virQEMUCapsPtr qemuCaps, int *tpmfd, int *cancelfd, char **chardev) @@ -10033,9 +10032,6 @@ qemuBuildTPMBackendStr(const virDomainDef *def, switch (tpm->type) { case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_TPM_PASSTHROUGH)) - goto no_support; - tpmdev = tpm->data.passthrough.source.data.file.path; if (!(cancel_path = virTPMCreateCancelPath(tpmdev))) goto error; @@ -10062,9 +10058,6 @@ qemuBuildTPMBackendStr(const virDomainDef *def, break; case VIR_DOMAIN_TPM_TYPE_EMULATOR: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_TPM_EMULATOR)) - goto no_support; - virBufferAddLit(&buf, ",chardev=chrtpm"); if (virAsprintf(chardev, "socket,id=chrtpm,path=%s", @@ -10081,12 +10074,6 @@ qemuBuildTPMBackendStr(const virDomainDef *def, return virBufferContentAndReset(&buf); - no_support: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("The QEMU executable %s does not support TPM " - "backend type %s"), - def->emulator, type); - error: VIR_FREE(devset); VIR_FREE(cancel_path); @@ -10110,7 +10097,7 @@ qemuBuildTPMCommandLine(virCommandPtr cmd, if (!def->tpm) return 0; - if (!(optstr = qemuBuildTPMBackendStr(def, cmd, qemuCaps, + if (!(optstr = qemuBuildTPMBackendStr(def, cmd, &tpmfd, &cancelfd, &chardev))) return -1; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index a06672333c..e34d03191d 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -6384,7 +6384,8 @@ qemuDomainDeviceDefValidateVsock(const virDomainVsockDef *vsock, static int qemuDomainDeviceDefValidateTPM(virDomainTPMDef *tpm, - const virDomainDef *def ATTRIBUTE_UNUSED) + const virDomainDef *def, + virQEMUCapsPtr qemuCaps) { /* TPM 1.2 and 2 are not compatible, so we choose a specific version here */ if (tpm->version == VIR_DOMAIN_TPM_VERSION_DEFAULT) @@ -6406,7 +6407,31 @@ qemuDomainDeviceDefValidateTPM(virDomainTPMDef *tpm, case VIR_DOMAIN_TPM_VERSION_LAST: break; } + + switch (tpm->type) { + case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_TPM_PASSTHROUGH)) + goto no_support; + break; + + case VIR_DOMAIN_TPM_TYPE_EMULATOR: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_TPM_EMULATOR)) + goto no_support; + + break; + case VIR_DOMAIN_TPM_TYPE_LAST: + break; + } + return 0; + + no_support: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("The QEMU executable %s does not support TPM " + "backend type %s"), + def->emulator, + virDomainTPMBackendTypeToString(tpm->type)); + return -1; } @@ -6847,7 +6872,7 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, break; case VIR_DOMAIN_DEVICE_TPM: - ret = qemuDomainDeviceDefValidateTPM(dev->data.tpm, def); + ret = qemuDomainDeviceDefValidateTPM(dev->data.tpm, def, qemuCaps); break; case VIR_DOMAIN_DEVICE_GRAPHICS: -- 2.19.2

Also get rid of the temporary 'type' variable. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 3a4acb3166..60e00042c7 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10010,7 +10010,6 @@ qemuBuildTPMBackendStr(const virDomainDef *def, { const virDomainTPMDef *tpm = def->tpm; virBuffer buf = VIR_BUFFER_INITIALIZER; - const char *type = NULL; char *cancel_path = NULL; char *devset = NULL; char *cancelset = NULL; @@ -10019,16 +10018,8 @@ qemuBuildTPMBackendStr(const virDomainDef *def, *tpmfd = -1; *cancelfd = -1; - switch (tpm->type) { - case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH: - case VIR_DOMAIN_TPM_TYPE_EMULATOR: - type = virDomainTPMBackendTypeToString(tpm->type); - break; - case VIR_DOMAIN_TPM_TYPE_LAST: - goto error; - } - - virBufferAsprintf(&buf, "%s,id=tpm-%s", type, tpm->info.alias); + virBufferAsprintf(&buf, "%s", virDomainTPMBackendTypeToString(tpm->type)); + virBufferAsprintf(&buf, ",id=tpm-%s", tpm->info.alias); switch (tpm->type) { case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH: -- 2.19.2

Simplify the code by annotating all the temporary virBuffers with VIR_AUTOCLEAN. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 194 ++++++++++++++-------------------------- 1 file changed, 67 insertions(+), 127 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 60e00042c7..94a6ad546e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -205,7 +205,7 @@ qemuBuildMasterKeyCommandLine(virCommandPtr cmd, int ret = -1; char *alias = NULL; char *path = NULL; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; /* If the -object secret does not exist, then just return. This just * means the domain won't be able to use a secret master key and is @@ -235,7 +235,6 @@ qemuBuildMasterKeyCommandLine(virCommandPtr cmd, ret = 0; cleanup: - virBufferFreeAndReset(&buf); VIR_FREE(alias); VIR_FREE(path); return ret; @@ -737,7 +736,7 @@ static int qemuBuildObjectSecretCommandLine(virCommandPtr cmd, qemuDomainSecretInfoPtr secinfo) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; int ret = -1; virJSONValuePtr props = NULL; @@ -753,7 +752,6 @@ qemuBuildObjectSecretCommandLine(virCommandPtr cmd, ret = 0; cleanup: - virBufferFreeAndReset(&buf); virJSONValueFree(props); return ret; } @@ -935,7 +933,7 @@ qemuBuildTLSx509CommandLine(virCommandPtr cmd, const char *alias, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; int ret = -1; virJSONValuePtr props = NULL; @@ -952,7 +950,6 @@ qemuBuildTLSx509CommandLine(virCommandPtr cmd, ret = 0; cleanup: - virBufferFreeAndReset(&buf); virJSONValueFree(props); return ret; } @@ -988,7 +985,7 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, qemuDomainSecretInfoPtr secinfo) { char *ret = NULL; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; size_t i; switch ((virStorageNetProtocol) src->protocol) { @@ -1141,7 +1138,6 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, } cleanup: - virBufferFreeAndReset(&buf); return ret; } @@ -1838,7 +1834,7 @@ static char * qemuBuildDriveStr(virDomainDiskDefPtr disk, virQEMUCapsPtr qemuCaps) { - virBuffer opt = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; int detect_zeroes = virDomainDiskGetDetectZeroesMode(disk->discard, disk->detect_zeroes); @@ -1922,7 +1918,6 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, return virBufferContentAndReset(&opt); error: - virBufferFreeAndReset(&opt); return NULL; } @@ -2005,7 +2000,7 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, unsigned int bootindex, virQEMUCapsPtr qemuCaps) { - virBuffer opt = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus); const char *contAlias; char *backendAlias = NULL; @@ -2343,14 +2338,13 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, error: VIR_FREE(backendAlias); - virBufferFreeAndReset(&opt); return NULL; } char * qemuBuildZPCIDevStr(virDomainDeviceInfoPtr dev) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; virBufferAsprintf(&buf, "zpci,uid=%u,fid=%u,target=%s,id=zpci%u", @@ -2359,10 +2353,8 @@ qemuBuildZPCIDevStr(virDomainDeviceInfoPtr dev) dev->alias, dev->addr.pci.zpci.uid); - if (virBufferCheckError(&buf) < 0) { - virBufferFreeAndReset(&buf); + if (virBufferCheckError(&buf) < 0) return NULL; - } return virBufferContentAndReset(&buf); } @@ -2405,7 +2397,7 @@ qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd, virQEMUCapsPtr qemuCaps, unsigned int bootFloppy) { - virBuffer fdc_opts = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) fdc_opts = VIR_BUFFER_INITIALIZER; bool explicitfdc = qemuDomainNeedsFDC(def); bool hasfloppy = false; unsigned int bootindex; @@ -2485,7 +2477,6 @@ qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd, VIR_FREE(backendAlias); VIR_FREE(backendStr); VIR_FREE(bootindexStr); - virBufferFreeAndReset(&fdc_opts); return ret; } @@ -2494,15 +2485,13 @@ static int qemuBuildObjectCommandline(virCommandPtr cmd, virJSONValuePtr objProps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; if (!objProps) return 0; - if (virQEMUBuildObjectCommandlineFromJSON(&buf, objProps) < 0) { - virBufferFreeAndReset(&buf); + if (virQEMUBuildObjectCommandlineFromJSON(&buf, objProps) < 0) return -1; - } virCommandAddArg(cmd, "-object"); virCommandAddArgBuffer(cmd, &buf); @@ -2939,7 +2928,7 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, virQEMUCapsPtr qemuCaps, char **devstr) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; *devstr = NULL; @@ -3123,7 +3112,6 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, return 0; error: - virBufferFreeAndReset(&buf); return -1; } @@ -3749,7 +3737,7 @@ char * qemuBuildMemoryDeviceStr(virDomainMemoryDefPtr mem, qemuDomainObjPrivatePtr priv) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; const char *device; if (!mem->info.alias) { @@ -3835,7 +3823,7 @@ qemuBuildNicDevStr(virDomainDefPtr def, size_t vhostfdSize, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; bool usingVirtio = false; char macaddr[VIR_MAC_STRING_BUFLEN]; @@ -3996,7 +3984,6 @@ qemuBuildNicDevStr(virDomainDefPtr def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -4010,7 +3997,7 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, size_t vhostfdSize) { bool is_tap = false; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; virDomainNetType netType = virDomainNetGetActualType(net); virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); size_t i; @@ -4145,7 +4132,6 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, ret = virBufferContentAndReset(&buf); cleanup: - virBufferFreeAndReset(&buf); virObjectUnref(cfg); VIR_FREE(addr); return ret; @@ -4157,7 +4143,7 @@ qemuBuildWatchdogDevStr(const virDomainDef *def, virDomainWatchdogDefPtr dev, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; const char *model = virDomainWatchdogModelTypeToString(dev->model); if (!model) { @@ -4176,7 +4162,6 @@ qemuBuildWatchdogDevStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -4230,7 +4215,7 @@ qemuBuildMemballoonCommandLine(virCommandPtr cmd, const virDomainDef *def, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; if (!virDomainDefHasMemballoon(def)) return 0; @@ -4261,7 +4246,6 @@ qemuBuildMemballoonCommandLine(virCommandPtr cmd, return 0; error: - virBufferFreeAndReset(&buf); return -1; } @@ -4269,7 +4253,7 @@ qemuBuildMemballoonCommandLine(virCommandPtr cmd, static char * qemuBuildNVRAMDevStr(virDomainNVRAMDefPtr dev) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; if (dev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO && dev->info.addr.spaprvio.has_reg) { @@ -4287,7 +4271,6 @@ qemuBuildNVRAMDevStr(virDomainNVRAMDefPtr dev) return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -4330,7 +4313,7 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, virDomainInputDefPtr dev, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; switch ((virDomainInputType)dev->type) { case VIR_DOMAIN_INPUT_TYPE_MOUSE: @@ -4382,7 +4365,6 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -4391,7 +4373,7 @@ qemuBuildUSBInputDevStr(const virDomainDef *def, virDomainInputDefPtr dev, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; switch (dev->type) { case VIR_DOMAIN_INPUT_TYPE_MOUSE: @@ -4420,7 +4402,6 @@ qemuBuildUSBInputDevStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -4480,7 +4461,7 @@ qemuBuildSoundDevStr(const virDomainDef *def, virDomainSoundDefPtr sound, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; const char *model = NULL; /* Hack for devices with different names in QEMU and libvirt */ @@ -4533,7 +4514,6 @@ qemuBuildSoundDevStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -4559,7 +4539,7 @@ qemuBuildSoundCodecStr(virDomainSoundDefPtr sound, virDomainSoundCodecDefPtr codec, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; const char *stype; int type, flags; @@ -4579,7 +4559,6 @@ qemuBuildSoundCodecStr(virDomainSoundDefPtr sound, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -4653,7 +4632,7 @@ qemuBuildDeviceVideoStr(const virDomainDef *def, virDomainVideoDefPtr video, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; const char *model; /* We try to chose the best model for primary video device by preferring @@ -4741,7 +4720,6 @@ qemuBuildDeviceVideoStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -4907,7 +4885,7 @@ qemuBuildPCIHostdevDevStr(const virDomainDef *def, const char *configfd, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci; int backend = pcisrc->backend; @@ -4955,7 +4933,6 @@ qemuBuildPCIHostdevDevStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -4965,7 +4942,7 @@ qemuBuildUSBHostdevDevStr(const virDomainDef *def, virDomainHostdevDefPtr dev, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb; if (!dev->missing && !usbsrc->bus && !usbsrc->device) { @@ -4992,7 +4969,6 @@ qemuBuildUSBHostdevDevStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -5002,7 +4978,7 @@ qemuBuildHubDevStr(const virDomainDef *def, virDomainHubDefPtr dev, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; if (dev->type != VIR_DOMAIN_HUB_TYPE_USB) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, @@ -5028,7 +5004,6 @@ qemuBuildHubDevStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -5073,7 +5048,7 @@ qemuBuildSCSIiSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, virQEMUCapsPtr qemuCaps) { char *ret = NULL; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; char *netsource = NULL; virJSONValuePtr srcprops = NULL; virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi; @@ -5105,7 +5080,6 @@ qemuBuildSCSIiSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, cleanup: VIR_FREE(netsource); virJSONValueFree(srcprops); - virBufferFreeAndReset(&buf); return ret; } @@ -5115,7 +5089,7 @@ qemuBuildSCSIVHostHostdevDevStr(const virDomainDef *def, virQEMUCapsPtr qemuCaps, char *vhostfdName) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; virDomainHostdevSubsysSCSIVHostPtr hostsrc = &dev->source.subsys.u.scsi_host; if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VHOST_SCSI)) { @@ -5143,7 +5117,6 @@ qemuBuildSCSIVHostHostdevDevStr(const virDomainDef *def, return virBufferContentAndReset(&buf); cleanup: - virBufferFreeAndReset(&buf); return NULL; } @@ -5151,7 +5124,7 @@ char * qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; char *source = NULL; char *drivealias = NULL; virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi; @@ -5180,7 +5153,6 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -5188,7 +5160,7 @@ char * qemuBuildSCSIHostdevDevStr(const virDomainDef *def, virDomainHostdevDefPtr dev) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; int model = -1; char *driveAlias; const char *contAlias; @@ -5245,7 +5217,6 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -5390,7 +5361,7 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, unsigned int flags) { qemuDomainChrSourcePrivatePtr chrSourcePriv = QEMU_DOMAIN_CHR_SOURCE_PRIVATE(dev); - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; bool telnet; char *charAlias = NULL; char *ret = NULL; @@ -5581,7 +5552,6 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, ret = virBufferContentAndReset(&buf); cleanup: VIR_FREE(charAlias); - virBufferFreeAndReset(&buf); return ret; } @@ -5590,7 +5560,7 @@ qemuBuildHostdevMediatedDevStr(const virDomainDef *def, virDomainHostdevDefPtr dev, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; virDomainHostdevSubsysMediatedDevPtr mdevsrc = &dev->source.subsys.u.mdev; char *ret = NULL; char *mdevPath = NULL; @@ -5621,7 +5591,6 @@ qemuBuildHostdevMediatedDevStr(const virDomainDef *def, cleanup: VIR_FREE(mdevPath); - virBufferFreeAndReset(&buf); return ret; } @@ -5865,7 +5834,7 @@ static char * qemuBuildVirtioSerialPortDevStr(const virDomainDef *def, virDomainChrDefPtr dev) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; const char *contAlias; switch (dev->deviceType) { @@ -5925,14 +5894,13 @@ qemuBuildVirtioSerialPortDevStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } static char * qemuBuildSclpDevStr(virDomainChrDefPtr dev) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE) { switch (dev->targetType) { case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLP: @@ -5955,7 +5923,6 @@ qemuBuildSclpDevStr(virDomainChrDefPtr dev) return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -6064,7 +6031,7 @@ qemuBuildRNGDevStr(const virDomainDef *def, virDomainRNGDefPtr dev, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; if (!qemuDomainCheckCCWS390AddressSupport(def, &dev->info, qemuCaps, dev->source.file)) @@ -6097,7 +6064,6 @@ qemuBuildRNGDevStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -6166,7 +6132,7 @@ qemuBuildRNGCommandLine(virLogManagerPtr logManager, static char * qemuBuildSmbiosBiosStr(virSysinfoBIOSDefPtr def) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; if (!def) return NULL; @@ -6202,7 +6168,7 @@ static char * qemuBuildSmbiosSystemStr(virSysinfoSystemDefPtr def, bool skip_uuid) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; if (!def || (!def->manufacturer && !def->product && !def->version && @@ -6255,7 +6221,7 @@ qemuBuildSmbiosSystemStr(virSysinfoSystemDefPtr def, static char * qemuBuildSmbiosBaseBoardStr(virSysinfoBaseBoardDefPtr def) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; if (!def) return NULL; @@ -6297,7 +6263,6 @@ qemuBuildSmbiosBaseBoardStr(virSysinfoBaseBoardDefPtr def) return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -6305,7 +6270,7 @@ qemuBuildSmbiosBaseBoardStr(virSysinfoBaseBoardDefPtr def) static char * qemuBuildSmbiosOEMStringsStr(virSysinfoOEMStringsDefPtr def) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; size_t i; if (!def) @@ -6325,7 +6290,7 @@ qemuBuildSmbiosOEMStringsStr(virSysinfoOEMStringsDefPtr def) static char * qemuBuildSmbiosChassisStr(virSysinfoChassisDefPtr def) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; if (!def) return NULL; @@ -6362,7 +6327,6 @@ qemuBuildSmbiosChassisStr(virSysinfoChassisDefPtr def) return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -6454,7 +6418,7 @@ qemuBuildVMGenIDCommandLine(virCommandPtr cmd, const virDomainDef *def, virQEMUCapsPtr qemuCaps) { - virBuffer opts = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) opts = VIR_BUFFER_INITIALIZER; char guid[VIR_UUID_STRING_BUFLEN]; if (!def->genidRequested) @@ -6505,7 +6469,7 @@ static char * qemuBuildClockArgStr(virDomainClockDefPtr def) { size_t i; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; switch (def->offset) { case VIR_DOMAIN_CLOCK_OFFSET_UTC: @@ -6616,7 +6580,6 @@ qemuBuildClockArgStr(virDomainClockDefPtr def) return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -6791,7 +6754,7 @@ qemuBuildBootCommandLine(virCommandPtr cmd, const virDomainDef *def, virQEMUCapsPtr qemuCaps) { - virBuffer boot_buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) boot_buf = VIR_BUFFER_INITIALIZER; char *boot_opts_str = NULL; if (def->os.bootmenu) { @@ -6860,7 +6823,6 @@ qemuBuildBootCommandLine(virCommandPtr cmd, error: VIR_FREE(boot_opts_str); - virBufferFreeAndReset(&boot_buf); return -1; } @@ -7095,8 +7057,8 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, virArch hostarch = virArchFromHost(); char *cpu = NULL, *cpu_flags = NULL; int ret = -1; - virBuffer cpu_buf = VIR_BUFFER_INITIALIZER; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) cpu_buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; size_t i; if (def->cpu && @@ -7307,8 +7269,6 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, cleanup: VIR_FREE(cpu); VIR_FREE(cpu_flags); - virBufferFreeAndReset(&buf); - virBufferFreeAndReset(&cpu_buf); return ret; } @@ -7380,7 +7340,7 @@ qemuBuildNameCommandLine(virCommandPtr cmd, const virDomainDef *def, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; virCommandAddArg(cmd, "-name"); @@ -7410,7 +7370,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, virTristateSwitch vmport = def->features[VIR_DOMAIN_FEATURE_VMPORT]; virTristateSwitch smm = def->features[VIR_DOMAIN_FEATURE_SMM]; virCPUDefPtr cpu = def->cpu; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; size_t i; int ret = -1; @@ -7690,7 +7650,6 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, ret = 0; cleanup: - virBufferFreeAndReset(&buf); return ret; } @@ -7715,7 +7674,7 @@ qemuBuildSmpCommandLine(virCommandPtr cmd, virDomainDefPtr def) { char *smp; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; unsigned int maxvcpus = virDomainDefGetVcpusMax(def); unsigned int nvcpus = 0; virDomainVcpuDefPtr vcpu; @@ -7880,7 +7839,7 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, { size_t i, j; virQEMUCapsPtr qemuCaps = priv->qemuCaps; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; char *cpumask = NULL; char *tmpmask = NULL; char *next = NULL; @@ -8028,7 +7987,6 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, VIR_FREE(nodeBackends); } - virBufferFreeAndReset(&buf); return ret; } @@ -8044,7 +8002,7 @@ qemuBuildMemoryDeviceCommandLine(virCommandPtr cmd, /* memory hotplug requires NUMA to be enabled - we already checked * that memory devices are present only when NUMA is */ for (i = 0; i < def->nmems; i++) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; char *dimmStr; if (qemuBuildMemoryDimmBackendStr(&buf, def->mems[i], def, cfg, priv) < 0) @@ -8072,7 +8030,7 @@ qemuBuildGraphicsSDLCommandLine(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, virDomainGraphicsDefPtr graphics) { int ret = -1; - virBuffer opt = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; if (graphics->data.sdl.xauth) virCommandAddEnvPair(cmd, "XAUTHORITY", graphics->data.sdl.xauth); @@ -8111,7 +8069,6 @@ qemuBuildGraphicsSDLCommandLine(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, ret = 0; cleanup: - virBufferFreeAndReset(&opt); return ret; } @@ -8122,7 +8079,7 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg, virQEMUCapsPtr qemuCaps, virDomainGraphicsDefPtr graphics) { - virBuffer opt = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; virDomainGraphicsListenDefPtr glisten = NULL; bool escapeAddr; @@ -8248,7 +8205,6 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg, return 0; error: - virBufferFreeAndReset(&opt); return -1; } @@ -8259,7 +8215,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, virQEMUCapsPtr qemuCaps, virDomainGraphicsDefPtr graphics) { - virBuffer opt = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; virDomainGraphicsListenDefPtr glisten = NULL; int port = graphics->data.spice.port; int tlsPort = graphics->data.spice.tlsPort; @@ -8500,7 +8456,6 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, return 0; error: - virBufferFreeAndReset(&opt); return -1; } @@ -8512,7 +8467,7 @@ qemuBuildGraphicsEGLHeadlessCommandLine(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNU virDomainGraphicsDefPtr graphics) { int ret = -1; - virBuffer opt = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; virBufferAddLit(&opt, "egl-headless"); @@ -8537,7 +8492,6 @@ qemuBuildGraphicsEGLHeadlessCommandLine(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNU ret = 0; cleanup: - virBufferFreeAndReset(&opt); return ret; } @@ -9086,7 +9040,7 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager, size_t i; virDomainSmartcardDefPtr smartcard; char *devstr; - virBuffer opt = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; const char *database; const char *contAlias = NULL; unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT | @@ -9108,7 +9062,6 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks multiple smartcard " "support")); - virBufferFreeAndReset(&opt); return -1; } @@ -9199,7 +9152,7 @@ qemuBuildShmemDevLegacyStr(virDomainDefPtr def, virDomainShmemDefPtr shmem, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_IVSHMEM)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -9237,7 +9190,6 @@ qemuBuildShmemDevLegacyStr(virDomainDefPtr def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -9246,7 +9198,7 @@ qemuBuildShmemDevStr(virDomainDefPtr def, virDomainShmemDefPtr shmem, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; if ((shmem->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_PLAIN && !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_IVSHMEM_PLAIN)) || @@ -9274,10 +9226,8 @@ qemuBuildShmemDevStr(virDomainDefPtr def, virTristateSwitchTypeToString(shmem->msi.ioeventfd)); } - if (qemuBuildDeviceAddressStr(&buf, def, &shmem->info, qemuCaps) < 0) { - virBufferFreeAndReset(&buf); + if (qemuBuildDeviceAddressStr(&buf, def, &shmem->info, qemuCaps) < 0) return NULL; - } if (virBufferCheckError(&buf) < 0) return NULL; @@ -9323,7 +9273,7 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager, bool chardevStdioLogd) { virJSONValuePtr memProps = NULL; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; char *devstr = NULL; int rc; unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT | @@ -9755,7 +9705,7 @@ qemuBuildRedirdevDevStr(const virDomainDef *def, virQEMUCapsPtr qemuCaps) { size_t i; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; virDomainRedirFilterDefPtr redirfilter = def->redirfilter; if (dev->bus != VIR_DOMAIN_REDIRDEV_BUS_USB) { @@ -9825,7 +9775,6 @@ qemuBuildRedirdevDevStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -9877,7 +9826,7 @@ qemuBuildDomainLoaderCommandLine(virCommandPtr cmd, virDomainDefPtr def) { virDomainLoaderDefPtr loader = def->os.loader; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; int unit = 0; if (!loader) @@ -9927,8 +9876,6 @@ qemuBuildDomainLoaderCommandLine(virCommandPtr cmd, /* nada */ break; } - - virBufferFreeAndReset(&buf); } @@ -9936,7 +9883,7 @@ static char * qemuBuildTPMDevStr(const virDomainDef *def, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; const virDomainTPMDef *tpm = def->tpm; const char *model = virDomainTPMModelTypeToString(tpm->model); virQEMUCapsFlags flag; @@ -9971,7 +9918,6 @@ qemuBuildTPMDevStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - virBufferFreeAndReset(&buf); return NULL; } @@ -10009,7 +9955,7 @@ qemuBuildTPMBackendStr(const virDomainDef *def, char **chardev) { const virDomainTPMDef *tpm = def->tpm; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; char *cancel_path = NULL; char *devset = NULL; char *cancelset = NULL; @@ -10068,8 +10014,6 @@ qemuBuildTPMBackendStr(const virDomainDef *def, error: VIR_FREE(devset); VIR_FREE(cancel_path); - - virBufferFreeAndReset(&buf); return NULL; } @@ -10132,7 +10076,7 @@ static int qemuBuildSEVCommandLine(virDomainObjPtr vm, virCommandPtr cmd, virDomainSEVDefPtr sev) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; qemuDomainObjPrivatePtr priv = vm->privateData; char *path = NULL; int ret = -1; @@ -10165,7 +10109,6 @@ qemuBuildSEVCommandLine(virDomainObjPtr vm, virCommandPtr cmd, virCommandAddArgBuffer(cmd, &buf); ret = 0; cleanup: - virBufferFreeAndReset(&buf); return ret; } @@ -10350,7 +10293,7 @@ qemuBuildManagedPRCommandLine(virCommandPtr cmd, const virDomainDef *def, qemuDomainObjPrivatePtr priv) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; virJSONValuePtr props = NULL; int ret = -1; @@ -10368,7 +10311,6 @@ qemuBuildManagedPRCommandLine(virCommandPtr cmd, ret = 0; cleanup: - virBufferFreeAndReset(&buf); virJSONValueFree(props); return ret; } @@ -10499,7 +10441,7 @@ qemuBuildVsockDevStr(virDomainDefPtr def, const char *fdprefix) { qemuDomainVsockPrivatePtr priv = (qemuDomainVsockPrivatePtr)vsock->privateData; - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; char *ret = NULL; @@ -10520,7 +10462,6 @@ qemuBuildVsockDevStr(virDomainDefPtr def, ret = virBufferContentAndReset(&buf); cleanup: - virBufferFreeAndReset(&buf); return ret; } @@ -10847,7 +10788,7 @@ qemuBuildSerialChrDeviceStr(char **deviceStr, virDomainChrDefPtr serial, virQEMUCapsPtr qemuCaps) { - virBuffer buf = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; virQEMUCapsFlags caps; switch ((virDomainChrSerialTargetModel) serial->targetModel) { @@ -10895,7 +10836,6 @@ qemuBuildSerialChrDeviceStr(char **deviceStr, return 0; error: - virBufferFreeAndReset(&buf); return -1; } -- 2.19.2

On 8/20/19 2:59 PM, Ján Tomko wrote:
Simplify the code by annotating all the temporary virBuffers with VIR_AUTOCLEAN.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 194 ++++++++++++++-------------------------- 1 file changed, 67 insertions(+), 127 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 60e00042c7..94a6ad546e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c
@@ -6454,7 +6418,7 @@ qemuBuildVMGenIDCommandLine(virCommandPtr cmd, const virDomainDef *def, virQEMUCapsPtr qemuCaps) { - virBuffer opts = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) opts = VIR_BUFFER_INITIALIZER; char guid[VIR_UUID_STRING_BUFLEN];
if (!def->genidRequested)
Don't forget to remove virBufferFreeAndReset() here.
@@ -9086,7 +9040,7 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager, size_t i; virDomainSmartcardDefPtr smartcard; char *devstr; - virBuffer opt = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; const char *database; const char *contAlias = NULL; unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT | @@ -9108,7 +9062,6 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks multiple smartcard " "support")); - virBufferFreeAndReset(&opt); return -1; }
There are two more virBufferFreeAndReset()-s in this function. Don't forget to remove them too. Michal

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 94a6ad546e..b5448a074f 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -738,7 +738,7 @@ qemuBuildObjectSecretCommandLine(virCommandPtr cmd, { VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; int ret = -1; - virJSONValuePtr props = NULL; + VIR_AUTOPTR(virJSONValue) props = NULL; if (qemuBuildSecretInfoProps(secinfo, &props) < 0) return -1; @@ -752,7 +752,6 @@ qemuBuildObjectSecretCommandLine(virCommandPtr cmd, ret = 0; cleanup: - virJSONValueFree(props); return ret; } @@ -935,7 +934,7 @@ qemuBuildTLSx509CommandLine(virCommandPtr cmd, { VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; int ret = -1; - virJSONValuePtr props = NULL; + VIR_AUTOPTR(virJSONValue) props = NULL; if (qemuBuildTLSx509BackendProps(tlspath, isListen, verifypeer, alias, certEncSecretAlias, qemuCaps, &props) < 0) @@ -950,7 +949,6 @@ qemuBuildTLSx509CommandLine(virCommandPtr cmd, ret = 0; cleanup: - virJSONValueFree(props); return ret; } @@ -1641,7 +1639,7 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, qemuDomainStorageSourcePrivatePtr srcpriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(disk->src); qemuDomainSecretInfoPtr secinfo = NULL; qemuDomainSecretInfoPtr encinfo = NULL; - virJSONValuePtr srcprops = NULL; + VIR_AUTOPTR(virJSONValue) srcprops = NULL; char *source = NULL; bool rawluks = false; int ret = -1; @@ -1729,7 +1727,6 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, cleanup: VIR_FREE(source); - virJSONValueFree(srcprops); return ret; } @@ -3407,7 +3404,7 @@ qemuBuildMemoryBackendProps(virJSONValuePtr *backendProps, bool prealloc = false; virBitmapPtr nodemask = NULL; int ret = -1; - virJSONValuePtr props = NULL; + VIR_AUTOPTR(virJSONValue) props = NULL; bool nodeSpecified = virDomainNumatuneNodeSpecified(def->numa, mem->targetNode); unsigned long long pagesize = mem->pagesize; bool needHugepage = !!pagesize; @@ -3651,7 +3648,6 @@ qemuBuildMemoryBackendProps(virJSONValuePtr *backendProps, ret = -1; cleanup: - virJSONValueFree(props); VIR_FREE(memPath); return ret; } @@ -3664,7 +3660,7 @@ qemuBuildMemoryCellBackendStr(virDomainDefPtr def, qemuDomainObjPrivatePtr priv, virBufferPtr buf) { - virJSONValuePtr props = NULL; + VIR_AUTOPTR(virJSONValue) props = NULL; char *alias = NULL; int ret = -1; int rc; @@ -3690,7 +3686,6 @@ qemuBuildMemoryCellBackendStr(virDomainDefPtr def, cleanup: VIR_FREE(alias); - virJSONValueFree(props); return ret; } @@ -3703,7 +3698,7 @@ qemuBuildMemoryDimmBackendStr(virBufferPtr buf, virQEMUDriverConfigPtr cfg, qemuDomainObjPrivatePtr priv) { - virJSONValuePtr props = NULL; + VIR_AUTOPTR(virJSONValue) props = NULL; char *alias = NULL; int ret = -1; @@ -3727,7 +3722,6 @@ qemuBuildMemoryDimmBackendStr(virBufferPtr buf, cleanup: VIR_FREE(alias); - virJSONValueFree(props); return ret; } @@ -5050,7 +5044,7 @@ qemuBuildSCSIiSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, char *ret = NULL; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; char *netsource = NULL; - virJSONValuePtr srcprops = NULL; + VIR_AUTOPTR(virJSONValue) srcprops = NULL; virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi; virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc = &scsisrc->u.iscsi; qemuDomainStorageSourcePrivatePtr srcPriv = @@ -5079,7 +5073,6 @@ qemuBuildSCSIiSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, cleanup: VIR_FREE(netsource); - virJSONValueFree(srcprops); return ret; } @@ -6080,7 +6073,7 @@ qemuBuildRNGCommandLine(virLogManagerPtr logManager, size_t i; for (i = 0; i < def->nrngs; i++) { - virJSONValuePtr props; + VIR_AUTOPTR(virJSONValue) props = NULL; virBuffer buf = VIR_BUFFER_INITIALIZER; virDomainRNGDefPtr rng = def->rngs[i]; char *tmp; @@ -6107,7 +6100,6 @@ qemuBuildRNGCommandLine(virLogManagerPtr logManager, return -1; rc = virQEMUBuildObjectCommandlineFromJSON(&buf, props); - virJSONValueFree(props); if (rc < 0) return -1; @@ -9272,7 +9264,7 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager, virQEMUCapsPtr qemuCaps, bool chardevStdioLogd) { - virJSONValuePtr memProps = NULL; + VIR_AUTOPTR(virJSONValue) memProps = NULL; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; char *devstr = NULL; int rc; @@ -9317,7 +9309,6 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager, return -1; rc = virQEMUBuildObjectCommandlineFromJSON(&buf, memProps); - virJSONValueFree(memProps); if (rc < 0) return -1; @@ -10294,7 +10285,7 @@ qemuBuildManagedPRCommandLine(virCommandPtr cmd, qemuDomainObjPrivatePtr priv) { VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; - virJSONValuePtr props = NULL; + VIR_AUTOPTR(virJSONValue) props = NULL; int ret = -1; if (!virDomainDefHasManagedPR(def)) @@ -10311,7 +10302,6 @@ qemuBuildManagedPRCommandLine(virCommandPtr cmd, ret = 0; cleanup: - virJSONValueFree(props); return ret; } -- 2.19.2

On 8/20/19 2:59 PM, Ján Tomko wrote:
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 94a6ad546e..b5448a074f 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c
You can also modify qemuDiskSourceGetProps(). The virJSONValueObjectCreate() will steal @props and set it to NULL on success. So virJSONValueFree() can be called safely there too. Michal

Remove the VIR_FREE's from the cleanup sections. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 207 +++++++++++++--------------------------- 1 file changed, 66 insertions(+), 141 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b5448a074f..fe06867a88 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -203,8 +203,8 @@ qemuBuildMasterKeyCommandLine(virCommandPtr cmd, qemuDomainObjPrivatePtr priv) { int ret = -1; - char *alias = NULL; - char *path = NULL; + VIR_AUTOFREE(char *) alias = NULL; + VIR_AUTOFREE(char *) path = NULL; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; /* If the -object secret does not exist, then just return. This just @@ -235,8 +235,6 @@ qemuBuildMasterKeyCommandLine(virCommandPtr cmd, ret = 0; cleanup: - VIR_FREE(alias); - VIR_FREE(path); return ret; } @@ -301,7 +299,7 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, virQEMUCapsPtr qemuCaps) { int ret = -1; - char *devStr = NULL; + VIR_AUTOFREE(char *) devStr = NULL; const char *contAlias = NULL; bool contIsPHB = false; int contTargetIndex = 0; @@ -401,7 +399,6 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, ret = 0; cleanup: - VIR_FREE(devStr); return ret; } @@ -703,7 +700,7 @@ qemuBuildSecretInfoProps(qemuDomainSecretInfoPtr secinfo, virJSONValuePtr *propsret) { int ret = -1; - char *keyid = NULL; + VIR_AUTOFREE(char *) keyid = NULL; if (!(keyid = qemuDomainGetMasterKeyAlias())) return -1; @@ -715,7 +712,6 @@ qemuBuildSecretInfoProps(qemuDomainSecretInfoPtr secinfo, "s:iv", secinfo->s.aes.iv, "s:format", "base64", NULL); - VIR_FREE(keyid); return ret; } @@ -1518,13 +1514,12 @@ qemuCheckFips(void) bool ret = false; if (virFileExists("/proc/sys/crypto/fips_enabled")) { - char *buf = NULL; + VIR_AUTOFREE(char *) buf = NULL; if (virFileReadAll("/proc/sys/crypto/fips_enabled", 10, &buf) < 0) return ret; if (STREQ(buf, "1\n")) ret = true; - VIR_FREE(buf); } return ret; @@ -1612,7 +1607,7 @@ static int qemuBuildDriveSourcePR(virBufferPtr buf, virDomainDiskDefPtr disk) { - char *alias = NULL; + VIR_AUTOFREE(char *) alias = NULL; const char *defaultAlias = NULL; if (!disk->src->pr) @@ -1625,7 +1620,6 @@ qemuBuildDriveSourcePR(virBufferPtr buf, virBufferAsprintf(buf, ",file.pr-manager=%s", alias ? alias : defaultAlias); - VIR_FREE(alias); return 0; } @@ -1640,7 +1634,7 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, qemuDomainSecretInfoPtr secinfo = NULL; qemuDomainSecretInfoPtr encinfo = NULL; VIR_AUTOPTR(virJSONValue) srcprops = NULL; - char *source = NULL; + VIR_AUTOFREE(char *) source = NULL; bool rawluks = false; int ret = -1; @@ -1726,7 +1720,6 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, ret = 0; cleanup: - VIR_FREE(source); return ret; } @@ -1839,13 +1832,12 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, goto error; if (!qemuDiskBusNeedsDriveArg(disk->bus)) { - char *drivealias = qemuAliasDiskDriveFromDisk(disk); + VIR_AUTOFREE(char *) drivealias = qemuAliasDiskDriveFromDisk(disk); if (!drivealias) goto error; virBufferAddLit(&opt, "if=none"); virBufferAsprintf(&opt, ",id=%s", drivealias); - VIR_FREE(drivealias); } else { int idx = virDiskNameToIndex(disk->dst); @@ -2000,7 +1992,7 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus); const char *contAlias; - char *backendAlias = NULL; + VIR_AUTOFREE(char *) backendAlias = NULL; VIR_AUTOFREE(char *) scsiVPDDeviceId = NULL; int controllerModel; @@ -2334,7 +2326,6 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, return virBufferContentAndReset(&opt); error: - VIR_FREE(backendAlias); return NULL; } @@ -2360,7 +2351,7 @@ static int qemuCommandAddZPCIDevice(virCommandPtr cmd, virDomainDeviceInfoPtr dev) { - char *devstr = NULL; + VIR_AUTOFREE(char *) devstr = NULL; virCommandAddArg(cmd, "-device"); @@ -2369,7 +2360,6 @@ qemuCommandAddZPCIDevice(virCommandPtr cmd, virCommandAddArg(cmd, devstr); - VIR_FREE(devstr); return 0; } @@ -2399,9 +2389,9 @@ qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd, bool hasfloppy = false; unsigned int bootindex; char driveLetter; - char *backendAlias = NULL; - char *backendStr = NULL; - char *bootindexStr = NULL; + VIR_AUTOFREE(char *) backendAlias = NULL; + VIR_AUTOFREE(char *) backendStr = NULL; + VIR_AUTOFREE(char *) bootindexStr = NULL; size_t i; int ret = -1; @@ -2471,9 +2461,6 @@ qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd, ret = 0; cleanup: - VIR_FREE(backendAlias); - VIR_FREE(backendStr); - VIR_FREE(bootindexStr); return ret; } @@ -2582,7 +2569,7 @@ qemuBuildDiskCommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps, unsigned int bootindex) { - char *optstr; + VIR_AUTOFREE(char *) optstr = NULL; if (qemuBuildDiskSourceCommandLine(cmd, disk, qemuCaps) < 0) return -1; @@ -2599,7 +2586,6 @@ qemuBuildDiskCommandLine(virCommandPtr cmd, qemuCaps))) return -1; virCommandAddArg(cmd, optstr); - VIR_FREE(optstr); } } @@ -3400,7 +3386,7 @@ qemuBuildMemoryBackendProps(virJSONValuePtr *backendProps, const long system_page_size = virGetSystemPageSizeKB(); virDomainMemoryAccess memAccess = mem->access; size_t i; - char *memPath = NULL; + VIR_AUTOFREE(char *) memPath = NULL; bool prealloc = false; virBitmapPtr nodemask = NULL; int ret = -1; @@ -3648,7 +3634,6 @@ qemuBuildMemoryBackendProps(virJSONValuePtr *backendProps, ret = -1; cleanup: - VIR_FREE(memPath); return ret; } @@ -3661,7 +3646,7 @@ qemuBuildMemoryCellBackendStr(virDomainDefPtr def, virBufferPtr buf) { VIR_AUTOPTR(virJSONValue) props = NULL; - char *alias = NULL; + VIR_AUTOFREE(char *) alias = NULL; int ret = -1; int rc; virDomainMemoryDef mem = { 0 }; @@ -3685,7 +3670,6 @@ qemuBuildMemoryCellBackendStr(virDomainDefPtr def, ret = rc; cleanup: - VIR_FREE(alias); return ret; } @@ -3699,7 +3683,7 @@ qemuBuildMemoryDimmBackendStr(virBufferPtr buf, qemuDomainObjPrivatePtr priv) { VIR_AUTOPTR(virJSONValue) props = NULL; - char *alias = NULL; + VIR_AUTOFREE(char *) alias = NULL; int ret = -1; if (!mem->info.alias) { @@ -3721,7 +3705,6 @@ qemuBuildMemoryDimmBackendStr(virBufferPtr buf, ret = 0; cleanup: - VIR_FREE(alias); return ret; } @@ -3995,7 +3978,6 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, virDomainNetType netType = virDomainNetGetActualType(net); virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); size_t i; - char *addr = NULL; char *ret = NULL; if (net->script && netType != VIR_DOMAIN_NET_TYPE_ETHERNET) { @@ -4062,6 +4044,7 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, virBufferAddLit(&buf, "user,"); for (i = 0; i < net->guestIP.nips; i++) { const virNetDevIPAddr *ip = net->guestIP.ips[i]; + VIR_AUTOFREE(char *) addr = NULL; const char *prefix = ""; if (!(addr = virSocketAddrFormat(&ip->address))) @@ -4076,7 +4059,6 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, if (ip->prefix) virBufferAsprintf(&buf, "/%u", ip->prefix); virBufferAddChar(&buf, ','); - VIR_FREE(addr); } break; @@ -4127,7 +4109,6 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, ret = virBufferContentAndReset(&buf); cleanup: virObjectUnref(cfg); - VIR_FREE(addr); return ret; } @@ -4166,7 +4147,7 @@ qemuBuildWatchdogCommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps) { virDomainWatchdogDefPtr watchdog = def->watchdog; - char *optstr; + VIR_AUTOFREE(char *) optstr = NULL; const char *action; int actualAction; @@ -4183,7 +4164,6 @@ qemuBuildWatchdogCommandLine(virCommandPtr cmd, return -1; virCommandAddArg(cmd, optstr); - VIR_FREE(optstr); /* qemu doesn't have a 'dump' action; we tell qemu to 'pause', then libvirt listens for the watchdog event, and we perform the dump @@ -4285,13 +4265,12 @@ qemuBuildNVRAMCommandLine(virCommandPtr cmd, return -1; } - char *optstr; + VIR_AUTOFREE(char *) optstr = NULL; virCommandAddArg(cmd, "-global"); optstr = qemuBuildNVRAMDevStr(def->nvram); if (!optstr) return -1; virCommandAddArg(cmd, optstr); - VIR_FREE(optstr); } else { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("nvram device is only supported for PPC64")); @@ -4430,7 +4409,7 @@ qemuBuildInputCommandLine(virCommandPtr cmd, for (i = 0; i < def->ninputs; i++) { virDomainInputDefPtr input = def->inputs[i]; - char *devstr = NULL; + VIR_AUTOFREE(char *) devstr = NULL; if (qemuCommandAddExtDevice(cmd, &input->info) < 0) return -1; @@ -4442,8 +4421,6 @@ qemuBuildInputCommandLine(virCommandPtr cmd, virCommandAddArg(cmd, "-device"); virCommandAddArg(cmd, devstr); } - - VIR_FREE(devstr); } return 0; @@ -4566,7 +4543,7 @@ qemuBuildSoundCommandLine(virCommandPtr cmd, for (i = 0; i < def->nsounds; i++) { virDomainSoundDefPtr sound = def->sounds[i]; - char *str = NULL; + VIR_AUTOFREE(char *) str = NULL; /* Sadly pcspk device doesn't use -device syntax. Fortunately * we don't need to set any PCI address on it, so we don't @@ -4582,7 +4559,6 @@ qemuBuildSoundCommandLine(virCommandPtr cmd, return -1; virCommandAddArg(cmd, str); - VIR_FREE(str); if (sound->model == VIR_DOMAIN_SOUND_MODEL_ICH6 || sound->model == VIR_DOMAIN_SOUND_MODEL_ICH9) { char *codecstr = NULL; @@ -4808,7 +4784,7 @@ qemuBuildVideoCommandLine(virCommandPtr cmd, size_t i; for (i = 0; i < def->nvideos; i++) { - char *str = NULL; + VIR_AUTOFREE(char *) str = NULL; virDomainVideoDefPtr video = def->videos[i]; if (video->type == VIR_DOMAIN_VIDEO_TYPE_NONE) @@ -4827,7 +4803,6 @@ qemuBuildVideoCommandLine(virCommandPtr cmd, return -1; virCommandAddArg(cmd, str); - VIR_FREE(str); } else { if (qemuBuildVgaVideoCommand(cmd, video, qemuCaps) < 0) return -1; @@ -4842,7 +4817,6 @@ qemuBuildVideoCommandLine(virCommandPtr cmd, return -1; virCommandAddArg(cmd, str); - VIR_FREE(str); } } @@ -4854,7 +4828,7 @@ int qemuOpenPCIConfig(virDomainHostdevDefPtr dev) { virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci; - char *path = NULL; + VIR_AUTOFREE(char *) path = NULL; int configfd = -1; if (virAsprintf(&path, "/sys/bus/pci/devices/%04x:%02x:%02x.%01x/config", @@ -4867,8 +4841,6 @@ qemuOpenPCIConfig(virDomainHostdevDefPtr dev) if (configfd < 0) virReportSystemError(errno, _("Failed opening %s"), path); - VIR_FREE(path); - return configfd; } @@ -5011,13 +4983,12 @@ qemuBuildHubCommandLine(virCommandPtr cmd, for (i = 0; i < def->nhubs; i++) { virDomainHubDefPtr hub = def->hubs[i]; - char *optstr; + VIR_AUTOFREE(char *) optstr = NULL; virCommandAddArg(cmd, "-device"); if (!(optstr = qemuBuildHubDevStr(def, hub, qemuCaps))) return -1; virCommandAddArg(cmd, optstr); - VIR_FREE(optstr); } return 0; @@ -5043,7 +5014,7 @@ qemuBuildSCSIiSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, { char *ret = NULL; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; - char *netsource = NULL; + VIR_AUTOFREE(char *) netsource = NULL; VIR_AUTOPTR(virJSONValue) srcprops = NULL; virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi; virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc = &scsisrc->u.iscsi; @@ -5072,7 +5043,6 @@ qemuBuildSCSIiSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, ret = virBufferContentAndReset(&buf); cleanup: - VIR_FREE(netsource); return ret; } @@ -5118,8 +5088,8 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, virQEMUCapsPtr qemuCaps) { VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; - char *source = NULL; - char *drivealias = NULL; + VIR_AUTOFREE(char *) source = NULL; + VIR_AUTOFREE(char *) drivealias = NULL; virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi; if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { @@ -5131,12 +5101,10 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, goto error; virBufferAsprintf(&buf, "file=/dev/%s,if=none,format=raw", source); } - VIR_FREE(source); if (!(drivealias = qemuAliasFromHostdev(dev))) goto error; virBufferAsprintf(&buf, ",id=%s", drivealias); - VIR_FREE(drivealias); if (dev->readonly) virBufferAddLit(&buf, ",readonly=on"); @@ -5155,7 +5123,7 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def, { VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; int model = -1; - char *driveAlias; + VIR_AUTOFREE(char *) driveAlias = NULL; const char *contAlias; model = qemuDomainFindSCSIControllerModel(def, dev->info); @@ -5200,7 +5168,6 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def, if (!(driveAlias = qemuAliasFromHostdev(dev))) goto error; virBufferAsprintf(&buf, ",drive=%s,id=%s", driveAlias, dev->info->alias); - VIR_FREE(driveAlias); if (dev->info->bootIndex) virBufferAsprintf(&buf, ",bootindex=%u", dev->info->bootIndex); @@ -5222,7 +5189,8 @@ qemuBuildChrChardevFileStr(virLogManagerPtr logManager, const char *appendarg, int appendval) { if (logManager) { - char *fdset, *fdpath; + VIR_AUTOFREE(char *) fdset = NULL; + VIR_AUTOFREE(char *) fdpath = NULL; int flags = 0; int logfd; @@ -5245,13 +5213,11 @@ qemuBuildChrChardevFileStr(virLogManagerPtr logManager, virCommandAddArg(cmd, "-add-fd"); virCommandAddArg(cmd, fdset); - VIR_FREE(fdset); if (!(fdpath = qemuVirCommandGetDevSet(cmd, logfd))) return -1; virBufferAsprintf(buf, ",%s=%s,%s=on", filearg, fdpath, appendarg); - VIR_FREE(fdpath); } else { virBufferAsprintf(buf, ",%s=", filearg); virQEMUBuildBufferEscapeComma(buf, fileval); @@ -5356,7 +5322,7 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, qemuDomainChrSourcePrivatePtr chrSourcePriv = QEMU_DOMAIN_CHR_SOURCE_PRIVATE(dev); VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; bool telnet; - char *charAlias = NULL; + VIR_AUTOFREE(char *) charAlias = NULL; char *ret = NULL; if (!(charAlias = qemuAliasChardevFromDevAlias(alias))) @@ -5447,7 +5413,7 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, qemuBuildChrChardevReconnectStr(&buf, &dev->data.tcp.reconnect); if (dev->data.tcp.haveTLS == VIR_TRISTATE_BOOL_YES) { - char *objalias = NULL; + VIR_AUTOFREE(char *) objalias = NULL; const char *tlsCertEncSecAlias = NULL; /* Add the secret object first if necessary. The @@ -5470,12 +5436,10 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, cfg->chardevTLSx509verify, tlsCertEncSecAlias, objalias, qemuCaps) < 0) { - VIR_FREE(objalias); goto cleanup; } virBufferAsprintf(&buf, ",tls-creds=%s", objalias); - VIR_FREE(objalias); } break; @@ -5544,7 +5508,6 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, ret = virBufferContentAndReset(&buf); cleanup: - VIR_FREE(charAlias); return ret; } @@ -5556,7 +5519,7 @@ qemuBuildHostdevMediatedDevStr(const virDomainDef *def, VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; virDomainHostdevSubsysMediatedDevPtr mdevsrc = &dev->source.subsys.u.mdev; char *ret = NULL; - char *mdevPath = NULL; + VIR_AUTOFREE(char *) mdevPath = NULL; const char *dev_str = NULL; if (!(mdevPath = virMediatedDeviceGetSysfsPath(mdevsrc->uuidstr))) @@ -5583,7 +5546,6 @@ qemuBuildHostdevMediatedDevStr(const virDomainDef *def, ret = virBufferContentAndReset(&buf); cleanup: - VIR_FREE(mdevPath); return ret; } @@ -5598,7 +5560,7 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, for (i = 0; i < def->nhostdevs; i++) { virDomainHostdevDefPtr hostdev = def->hostdevs[i]; virDomainHostdevSubsysPtr subsys = &hostdev->source.subsys; - char *devstr; + VIR_AUTOFREE(char *) devstr = NULL; if (hostdev->info->bootIndex) { if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS || @@ -5621,7 +5583,6 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, qemuBuildUSBHostdevDevStr(def, hostdev, qemuCaps))) return -1; virCommandAddArg(cmd, devstr); - VIR_FREE(devstr); } /* PCI */ @@ -5638,7 +5599,7 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, } } - char *configfd_name = NULL; + VIR_AUTOFREE(char *) configfd_name = NULL; unsigned int bootIndex = hostdev->info->bootIndex; /* bootNet will be non-0 if boot order was set and no other @@ -5668,18 +5629,16 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, virCommandAddArg(cmd, "-device"); devstr = qemuBuildPCIHostdevDevStr(def, hostdev, bootIndex, configfd_name, qemuCaps); - VIR_FREE(configfd_name); if (!devstr) return -1; virCommandAddArg(cmd, devstr); - VIR_FREE(devstr); } /* SCSI */ if (virHostdevIsSCSIDevice(hostdev)) { virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi; - char *drvstr; + VIR_AUTOFREE(char *) drvstr = NULL; if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc = @@ -5697,13 +5656,11 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, if (!(drvstr = qemuBuildSCSIHostdevDrvStr(hostdev, qemuCaps))) return -1; virCommandAddArg(cmd, drvstr); - VIR_FREE(drvstr); virCommandAddArg(cmd, "-device"); if (!(devstr = qemuBuildSCSIHostdevDevStr(def, hostdev))) return -1; virCommandAddArg(cmd, devstr); - VIR_FREE(devstr); } /* SCSI_host */ @@ -5711,7 +5668,7 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, subsys->type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST) { if (hostdev->source.subsys.u.scsi_host.protocol == VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_VHOST) { - char *vhostfdName = NULL; + VIR_AUTOFREE(char *) vhostfdName = NULL; int vhostfd = -1; if (virSCSIVHostOpenVhostSCSI(&vhostfd) < 0) @@ -5729,14 +5686,10 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, if (!(devstr = qemuBuildSCSIVHostHostdevDevStr(def, hostdev, qemuCaps, - vhostfdName))) { - VIR_FREE(vhostfdName); + vhostfdName))) return -1; - } - virCommandAddArg(cmd, devstr); - VIR_FREE(vhostfdName); - VIR_FREE(devstr); + virCommandAddArg(cmd, devstr); } } @@ -5782,7 +5735,6 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, qemuBuildHostdevMediatedDevStr(def, hostdev, qemuCaps))) return -1; virCommandAddArg(cmd, devstr); - VIR_FREE(devstr); } } @@ -5798,7 +5750,7 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager, virDomainDefPtr def, qemuDomainObjPrivatePtr priv) { - char *chrdev; + VIR_AUTOFREE(char *) chrdev = NULL; unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT | QEMU_BUILD_CHARDEV_UNIX_FD_PASS; if (priv->chardevStdioLogd) @@ -5814,7 +5766,6 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager, return -1; virCommandAddArg(cmd, "-chardev"); virCommandAddArg(cmd, chrdev); - VIR_FREE(chrdev); virCommandAddArg(cmd, "-mon"); virCommandAddArg(cmd, "chardev=charmonitor,id=monitor,mode=control"); @@ -5963,8 +5914,8 @@ qemuBuildRNGBackendProps(virDomainRNGDefPtr rng, virQEMUCapsPtr qemuCaps, virJSONValuePtr *props) { - char *objAlias = NULL; - char *charBackendAlias = NULL; + VIR_AUTOFREE(char *) objAlias = NULL; + VIR_AUTOFREE(char *) charBackendAlias = NULL; int ret = -1; if (virAsprintf(&objAlias, "obj%s", rng->info.alias) < 0) @@ -6013,8 +5964,6 @@ qemuBuildRNGBackendProps(virDomainRNGDefPtr rng, ret = 0; cleanup: - VIR_FREE(objAlias); - VIR_FREE(charBackendAlias); return ret; } @@ -6585,13 +6534,12 @@ qemuBuildClockCommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps) { size_t i; - char *rtcopt; + VIR_AUTOFREE(char *) rtcopt = NULL; virCommandAddArg(cmd, "-rtc"); if (!(rtcopt = qemuBuildClockArgStr(&def->clock))) return -1; virCommandAddArg(cmd, rtcopt); - VIR_FREE(rtcopt); if (def->clock.offset == VIR_DOMAIN_CLOCK_OFFSET_TIMEZONE && def->clock.data.timezone) { @@ -6747,7 +6695,7 @@ qemuBuildBootCommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps) { VIR_AUTOCLEAN(virBuffer) boot_buf = VIR_BUFFER_INITIALIZER; - char *boot_opts_str = NULL; + VIR_AUTOFREE(char *) boot_opts_str = NULL; if (def->os.bootmenu) { if (def->os.bootmenu == VIR_TRISTATE_BOOL_YES) @@ -6814,7 +6762,6 @@ qemuBuildBootCommandLine(virCommandPtr cmd, return 0; error: - VIR_FREE(boot_opts_str); return -1; } @@ -7047,7 +6994,8 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps) { virArch hostarch = virArchFromHost(); - char *cpu = NULL, *cpu_flags = NULL; + VIR_AUTOFREE(char *) cpu = NULL; + VIR_AUTOFREE(char *) cpu_flags = NULL; int ret = -1; VIR_AUTOCLEAN(virBuffer) cpu_buf = VIR_BUFFER_INITIALIZER; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; @@ -7259,8 +7207,6 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, ret = 0; cleanup: - VIR_FREE(cpu); - VIR_FREE(cpu_flags); return ret; } @@ -7665,7 +7611,7 @@ static int qemuBuildSmpCommandLine(virCommandPtr cmd, virDomainDefPtr def) { - char *smp; + char *smp = NULL; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; unsigned int maxvcpus = virDomainDefGetVcpusMax(def); unsigned int nvcpus = 0; @@ -7716,7 +7662,7 @@ qemuBuildMemPathStr(virQEMUDriverConfigPtr cfg, qemuDomainObjPrivatePtr priv) { const long system_page_size = virGetSystemPageSizeKB(); - char *mem_path = NULL; + VIR_AUTOFREE(char *) mem_path = NULL; /* There are two cases where we want to put -mem-path onto * the command line: First one is when there are no guest @@ -7743,7 +7689,6 @@ qemuBuildMemPathStr(virQEMUDriverConfigPtr cfg, } virCommandAddArgList(cmd, "-mem-path", mem_path, NULL); - VIR_FREE(mem_path); return 0; } @@ -8602,9 +8547,9 @@ qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver, int **nicindexes) { int ret = -1; - char *nic = NULL; - char *host = NULL; - char *chardev = NULL; + VIR_AUTOFREE(char *) nic = NULL; + VIR_AUTOFREE(char *) host = NULL; + VIR_AUTOFREE(char *) chardev = NULL; int *tapfd = NULL; size_t tapfdSize = 0; int *vhostfd = NULL; @@ -8918,9 +8863,6 @@ qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver, VIR_FREE(tapfdName); VIR_FREE(vhostfd); VIR_FREE(tapfd); - VIR_FREE(chardev); - VIR_FREE(host); - VIR_FREE(nic); return ret; } @@ -9031,7 +8973,7 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager, { size_t i; virDomainSmartcardDefPtr smartcard; - char *devstr; + VIR_AUTOFREE(char *) devstr = NULL; VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; const char *database; const char *contAlias = NULL; @@ -9109,7 +9051,6 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager, } virCommandAddArg(cmd, "-chardev"); virCommandAddArg(cmd, devstr); - VIR_FREE(devstr); virBufferAsprintf(&opt, "ccid-card-passthru,chardev=char%s", smartcard->info.alias); @@ -9231,8 +9172,8 @@ qemuBuildShmemDevStr(virDomainDefPtr def, virJSONValuePtr qemuBuildShmemBackendMemProps(virDomainShmemDefPtr shmem) { - char *mem_alias = NULL; - char *mem_path = NULL; + VIR_AUTOFREE(char *) mem_alias = NULL; + VIR_AUTOFREE(char *) mem_path = NULL; virJSONValuePtr ret = NULL; if (virAsprintf(&mem_path, "/dev/shm/%s", shmem->name) < 0) @@ -9248,8 +9189,6 @@ qemuBuildShmemBackendMemProps(virDomainShmemDefPtr shmem) NULL); cleanup: - VIR_FREE(mem_alias); - VIR_FREE(mem_path); return ret; } @@ -9387,13 +9326,12 @@ qemuBuildChrDeviceCommandLine(virCommandPtr cmd, virDomainChrDefPtr chr, virQEMUCapsPtr qemuCaps) { - char *devstr = NULL; + VIR_AUTOFREE(char *) devstr = NULL; if (qemuBuildChrDeviceStr(&devstr, def, chr, qemuCaps) < 0) return -1; virCommandAddArgList(cmd, "-device", devstr, NULL); - VIR_FREE(devstr); return 0; } @@ -9461,7 +9399,7 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager, for (i = 0; i < def->nserials; i++) { virDomainChrDefPtr serial = def->serials[i]; - char *devstr; + VIR_AUTOFREE(char *) devstr = NULL; if (serial->source->type == VIR_DOMAIN_CHR_TYPE_SPICEPORT && !havespice) continue; @@ -9474,7 +9412,6 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager, return -1; virCommandAddArg(cmd, "-chardev"); virCommandAddArg(cmd, devstr); - VIR_FREE(devstr); /* If the device is not a platform device, build the devstr */ if (!qemuChrIsPlatformDevice(def, serial)) { @@ -9518,7 +9455,7 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager, for (i = 0; i < def->nparallels; i++) { virDomainChrDefPtr parallel = def->parallels[i]; - char *devstr; + VIR_AUTOFREE(char *) devstr = NULL; if (!(devstr = qemuBuildChrChardevStr(logManager, secManager, cmd, cfg, def, @@ -9528,7 +9465,6 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager, return -1; virCommandAddArg(cmd, "-chardev"); virCommandAddArg(cmd, devstr); - VIR_FREE(devstr); if (qemuBuildChrDeviceCommandLine(cmd, def, parallel, qemuCaps) < 0) @@ -9947,9 +9883,9 @@ qemuBuildTPMBackendStr(const virDomainDef *def, { const virDomainTPMDef *tpm = def->tpm; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; - char *cancel_path = NULL; - char *devset = NULL; - char *cancelset = NULL; + VIR_AUTOFREE(char *) cancel_path = NULL; + VIR_AUTOFREE(char *) devset = NULL; + VIR_AUTOFREE(char *) cancelset = NULL; const char *tpmdev; *tpmfd = -1; @@ -9980,10 +9916,6 @@ qemuBuildTPMBackendStr(const virDomainDef *def, virBufferAddLit(&buf, ",cancel-path="); virQEMUBuildBufferEscapeComma(&buf, cancelset); - VIR_FREE(devset); - VIR_FREE(cancelset); - VIR_FREE(cancel_path); - break; case VIR_DOMAIN_TPM_TYPE_EMULATOR: virBufferAddLit(&buf, ",chardev=chrtpm"); @@ -10003,8 +9935,6 @@ qemuBuildTPMBackendStr(const virDomainDef *def, return virBufferContentAndReset(&buf); error: - VIR_FREE(devset); - VIR_FREE(cancel_path); return NULL; } @@ -10015,7 +9945,7 @@ qemuBuildTPMCommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps) { char *optstr; - char *chardev = NULL; + VIR_AUTOFREE(char *) chardev = NULL; int tpmfd = -1; int cancelfd = -1; char *fdset; @@ -10031,10 +9961,8 @@ qemuBuildTPMCommandLine(virCommandPtr cmd, virCommandAddArgList(cmd, "-tpmdev", optstr, NULL); VIR_FREE(optstr); - if (chardev) { + if (chardev) virCommandAddArgList(cmd, "-chardev", chardev, NULL); - VIR_FREE(chardev); - } if (tpmfd >= 0) { fdset = qemuVirCommandGetFDSet(cmd, tpmfd); @@ -10252,7 +10180,7 @@ qemuBuildPRManagerInfoPropsInternal(const char *alias, virJSONValuePtr qemuBuildPRManagedManagerInfoProps(qemuDomainObjPrivatePtr priv) { - char *path = NULL; + VIR_AUTOFREE(char *) path = NULL; virJSONValuePtr ret = NULL; if (!(path = qemuDomainGetManagedPRSocketPath(priv))) @@ -10261,7 +10189,6 @@ qemuBuildPRManagedManagerInfoProps(qemuDomainObjPrivatePtr priv) ret = qemuBuildPRManagerInfoPropsInternal(qemuDomainGetManagedPRAlias(), path); - VIR_FREE(path); return ret; } @@ -10463,7 +10390,7 @@ qemuBuildVsockCommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps) { qemuDomainVsockPrivatePtr priv = (qemuDomainVsockPrivatePtr)vsock->privateData; - char *devstr = NULL; + VIR_AUTOFREE(char *) devstr = NULL; int ret = -1; if (!(devstr = qemuBuildVsockDevStr(def, vsock, qemuCaps, ""))) @@ -10479,7 +10406,6 @@ qemuBuildVsockCommandLine(virCommandPtr cmd, ret = 0; cleanup: - VIR_FREE(devstr); return ret; } @@ -10845,7 +10771,7 @@ qemuBuildChannelChrDeviceStr(char **deviceStr, virDomainChrDefPtr chr) { int ret = -1; - char *addr = NULL; + VIR_AUTOFREE(char *) addr = NULL; int port; switch ((virDomainChrChannelTargetType)chr->targetType) { @@ -10875,7 +10801,6 @@ qemuBuildChannelChrDeviceStr(char **deviceStr, ret = 0; cleanup: - VIR_FREE(addr); return ret; } -- 2.19.2

On 8/20/19 2:59 PM, Ján Tomko wrote:
Remove the VIR_FREE's from the cleanup sections.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 207 +++++++++++++--------------------------- 1 file changed, 66 insertions(+), 141 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b5448a074f..fe06867a88 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c
Missing: qemuBuildControllersByTypeCommandLine, qemuBuildSoundCommandLine, qemuBuildRNGCommandLine, qemuBuildSmbiosCommandLine Maybe you are doing that (and other suggestions I have for this patch) in next patches. If so, disregard me.
@@ -203,8 +203,8 @@ qemuBuildMasterKeyCommandLine(virCommandPtr cmd, qemuDomainObjPrivatePtr priv) { int ret = -1; - char *alias = NULL; - char *path = NULL; + VIR_AUTOFREE(char *) alias = NULL; + VIR_AUTOFREE(char *) path = NULL; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER;
/* If the -object secret does not exist, then just return. This just @@ -235,8 +235,6 @@ qemuBuildMasterKeyCommandLine(virCommandPtr cmd, ret = 0;
cleanup: - VIR_FREE(alias); - VIR_FREE(path); return ret; }
@@ -301,7 +299,7 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, virQEMUCapsPtr qemuCaps) { int ret = -1; - char *devStr = NULL; + VIR_AUTOFREE(char *) devStr = NULL; const char *contAlias = NULL; bool contIsPHB = false; int contTargetIndex = 0; @@ -401,7 +399,6 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
ret = 0; cleanup: - VIR_FREE(devStr); return ret; }
@@ -703,7 +700,7 @@ qemuBuildSecretInfoProps(qemuDomainSecretInfoPtr secinfo, virJSONValuePtr *propsret) { int ret = -1; - char *keyid = NULL; + VIR_AUTOFREE(char *) keyid = NULL;
if (!(keyid = qemuDomainGetMasterKeyAlias())) return -1; @@ -715,7 +712,6 @@ qemuBuildSecretInfoProps(qemuDomainSecretInfoPtr secinfo, "s:iv", secinfo->s.aes.iv, "s:format", "base64", NULL);
- VIR_FREE(keyid); return ret; }
@@ -1518,13 +1514,12 @@ qemuCheckFips(void) bool ret = false;
if (virFileExists("/proc/sys/crypto/fips_enabled")) { - char *buf = NULL; + VIR_AUTOFREE(char *) buf = NULL;
if (virFileReadAll("/proc/sys/crypto/fips_enabled", 10, &buf) < 0) return ret; if (STREQ(buf, "1\n")) ret = true; - VIR_FREE(buf); }
return ret; @@ -1612,7 +1607,7 @@ static int qemuBuildDriveSourcePR(virBufferPtr buf, virDomainDiskDefPtr disk) { - char *alias = NULL; + VIR_AUTOFREE(char *) alias = NULL; const char *defaultAlias = NULL;
if (!disk->src->pr) @@ -1625,7 +1620,6 @@ qemuBuildDriveSourcePR(virBufferPtr buf,
virBufferAsprintf(buf, ",file.pr-manager=%s", alias ? alias : defaultAlias); - VIR_FREE(alias); return 0; }
@@ -1640,7 +1634,7 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, qemuDomainSecretInfoPtr secinfo = NULL; qemuDomainSecretInfoPtr encinfo = NULL; VIR_AUTOPTR(virJSONValue) srcprops = NULL; - char *source = NULL; + VIR_AUTOFREE(char *) source = NULL; bool rawluks = false; int ret = -1;
@@ -1726,7 +1720,6 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, ret = 0;
cleanup: - VIR_FREE(source); return ret; }
@@ -1839,13 +1832,12 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, goto error;
if (!qemuDiskBusNeedsDriveArg(disk->bus)) { - char *drivealias = qemuAliasDiskDriveFromDisk(disk); + VIR_AUTOFREE(char *) drivealias = qemuAliasDiskDriveFromDisk(disk); if (!drivealias) goto error;
virBufferAddLit(&opt, "if=none"); virBufferAsprintf(&opt, ",id=%s", drivealias); - VIR_FREE(drivealias); } else { int idx = virDiskNameToIndex(disk->dst);
@@ -2000,7 +1992,7 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus); const char *contAlias; - char *backendAlias = NULL; + VIR_AUTOFREE(char *) backendAlias = NULL; VIR_AUTOFREE(char *) scsiVPDDeviceId = NULL; int controllerModel;
@@ -2334,7 +2326,6 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, return virBufferContentAndReset(&opt);
error: - VIR_FREE(backendAlias); return NULL; }
There is one more VIR_FREE(backendAlias) cca in the middle of the function.
@@ -2360,7 +2351,7 @@ static int qemuCommandAddZPCIDevice(virCommandPtr cmd, virDomainDeviceInfoPtr dev) { - char *devstr = NULL; + VIR_AUTOFREE(char *) devstr = NULL;
virCommandAddArg(cmd, "-device");
@@ -2369,7 +2360,6 @@ qemuCommandAddZPCIDevice(virCommandPtr cmd,
virCommandAddArg(cmd, devstr);
- VIR_FREE(devstr); return 0; }
@@ -2399,9 +2389,9 @@ qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd, bool hasfloppy = false; unsigned int bootindex; char driveLetter; - char *backendAlias = NULL; - char *backendStr = NULL; - char *bootindexStr = NULL; + VIR_AUTOFREE(char *) backendAlias = NULL; + VIR_AUTOFREE(char *) backendStr = NULL; + VIR_AUTOFREE(char *) bootindexStr = NULL;
These variables are not used outside of the for() loop. If you move them there, you can drop also VIR_FREE() calls over each one of them at the end of the loop.
size_t i; int ret = -1;
@@ -2471,9 +2461,6 @@ qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd, ret = 0;
cleanup: - VIR_FREE(backendAlias); - VIR_FREE(backendStr); - VIR_FREE(bootindexStr); return ret; }
@@ -2582,7 +2569,7 @@ qemuBuildDiskCommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps, unsigned int bootindex) { - char *optstr; + VIR_AUTOFREE(char *) optstr = NULL;
if (qemuBuildDiskSourceCommandLine(cmd, disk, qemuCaps) < 0) return -1; @@ -2599,7 +2586,6 @@ qemuBuildDiskCommandLine(virCommandPtr cmd, qemuCaps))) return -1; virCommandAddArg(cmd, optstr); - VIR_FREE(optstr); } }
@@ -3400,7 +3386,7 @@ qemuBuildMemoryBackendProps(virJSONValuePtr *backendProps, const long system_page_size = virGetSystemPageSizeKB(); virDomainMemoryAccess memAccess = mem->access; size_t i; - char *memPath = NULL; + VIR_AUTOFREE(char *) memPath = NULL; bool prealloc = false; virBitmapPtr nodemask = NULL; int ret = -1; @@ -3648,7 +3634,6 @@ qemuBuildMemoryBackendProps(virJSONValuePtr *backendProps, ret = -1;
cleanup: - VIR_FREE(memPath); return ret; }
@@ -3661,7 +3646,7 @@ qemuBuildMemoryCellBackendStr(virDomainDefPtr def, virBufferPtr buf) { VIR_AUTOPTR(virJSONValue) props = NULL; - char *alias = NULL; + VIR_AUTOFREE(char *) alias = NULL; int ret = -1; int rc; virDomainMemoryDef mem = { 0 }; @@ -3685,7 +3670,6 @@ qemuBuildMemoryCellBackendStr(virDomainDefPtr def, ret = rc;
cleanup: - VIR_FREE(alias);
return ret; } @@ -3699,7 +3683,7 @@ qemuBuildMemoryDimmBackendStr(virBufferPtr buf, qemuDomainObjPrivatePtr priv) { VIR_AUTOPTR(virJSONValue) props = NULL; - char *alias = NULL; + VIR_AUTOFREE(char *) alias = NULL; int ret = -1;
if (!mem->info.alias) { @@ -3721,7 +3705,6 @@ qemuBuildMemoryDimmBackendStr(virBufferPtr buf, ret = 0;
cleanup: - VIR_FREE(alias);
return ret; } @@ -3995,7 +3978,6 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, virDomainNetType netType = virDomainNetGetActualType(net); virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); size_t i; - char *addr = NULL; char *ret = NULL;
if (net->script && netType != VIR_DOMAIN_NET_TYPE_ETHERNET) { @@ -4062,6 +4044,7 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, virBufferAddLit(&buf, "user,"); for (i = 0; i < net->guestIP.nips; i++) { const virNetDevIPAddr *ip = net->guestIP.ips[i]; + VIR_AUTOFREE(char *) addr = NULL; const char *prefix = "";
if (!(addr = virSocketAddrFormat(&ip->address))) @@ -4076,7 +4059,6 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, if (ip->prefix) virBufferAsprintf(&buf, "/%u", ip->prefix); virBufferAddChar(&buf, ','); - VIR_FREE(addr); } break;
@@ -4127,7 +4109,6 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, ret = virBufferContentAndReset(&buf); cleanup: virObjectUnref(cfg); - VIR_FREE(addr); return ret; }
@@ -4166,7 +4147,7 @@ qemuBuildWatchdogCommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps) { virDomainWatchdogDefPtr watchdog = def->watchdog; - char *optstr; + VIR_AUTOFREE(char *) optstr = NULL; const char *action; int actualAction;
@@ -4183,7 +4164,6 @@ qemuBuildWatchdogCommandLine(virCommandPtr cmd, return -1;
virCommandAddArg(cmd, optstr); - VIR_FREE(optstr);
/* qemu doesn't have a 'dump' action; we tell qemu to 'pause', then libvirt listens for the watchdog event, and we perform the dump @@ -4285,13 +4265,12 @@ qemuBuildNVRAMCommandLine(virCommandPtr cmd, return -1; }
- char *optstr; + VIR_AUTOFREE(char *) optstr = NULL; virCommandAddArg(cmd, "-global"); optstr = qemuBuildNVRAMDevStr(def->nvram); if (!optstr) return -1; virCommandAddArg(cmd, optstr); - VIR_FREE(optstr); } else { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("nvram device is only supported for PPC64")); @@ -4430,7 +4409,7 @@ qemuBuildInputCommandLine(virCommandPtr cmd,
for (i = 0; i < def->ninputs; i++) { virDomainInputDefPtr input = def->inputs[i]; - char *devstr = NULL; + VIR_AUTOFREE(char *) devstr = NULL;
if (qemuCommandAddExtDevice(cmd, &input->info) < 0) return -1; @@ -4442,8 +4421,6 @@ qemuBuildInputCommandLine(virCommandPtr cmd, virCommandAddArg(cmd, "-device"); virCommandAddArg(cmd, devstr); } - - VIR_FREE(devstr); }
return 0; @@ -4566,7 +4543,7 @@ qemuBuildSoundCommandLine(virCommandPtr cmd,
for (i = 0; i < def->nsounds; i++) { virDomainSoundDefPtr sound = def->sounds[i]; - char *str = NULL; + VIR_AUTOFREE(char *) str = NULL;
/* Sadly pcspk device doesn't use -device syntax. Fortunately * we don't need to set any PCI address on it, so we don't @@ -4582,7 +4559,6 @@ qemuBuildSoundCommandLine(virCommandPtr cmd, return -1;
virCommandAddArg(cmd, str); - VIR_FREE(str); if (sound->model == VIR_DOMAIN_SOUND_MODEL_ICH6 || sound->model == VIR_DOMAIN_SOUND_MODEL_ICH9) { char *codecstr = NULL; @@ -4808,7 +4784,7 @@ qemuBuildVideoCommandLine(virCommandPtr cmd, size_t i;
for (i = 0; i < def->nvideos; i++) { - char *str = NULL; + VIR_AUTOFREE(char *) str = NULL; virDomainVideoDefPtr video = def->videos[i];
if (video->type == VIR_DOMAIN_VIDEO_TYPE_NONE) @@ -4827,7 +4803,6 @@ qemuBuildVideoCommandLine(virCommandPtr cmd, return -1;
virCommandAddArg(cmd, str); - VIR_FREE(str); } else { if (qemuBuildVgaVideoCommand(cmd, video, qemuCaps) < 0) return -1; @@ -4842,7 +4817,6 @@ qemuBuildVideoCommandLine(virCommandPtr cmd, return -1;
virCommandAddArg(cmd, str); - VIR_FREE(str); } }
@@ -4854,7 +4828,7 @@ int qemuOpenPCIConfig(virDomainHostdevDefPtr dev) { virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci; - char *path = NULL; + VIR_AUTOFREE(char *) path = NULL; int configfd = -1;
if (virAsprintf(&path, "/sys/bus/pci/devices/%04x:%02x:%02x.%01x/config", @@ -4867,8 +4841,6 @@ qemuOpenPCIConfig(virDomainHostdevDefPtr dev) if (configfd < 0) virReportSystemError(errno, _("Failed opening %s"), path);
- VIR_FREE(path); - return configfd; }
@@ -5011,13 +4983,12 @@ qemuBuildHubCommandLine(virCommandPtr cmd,
for (i = 0; i < def->nhubs; i++) { virDomainHubDefPtr hub = def->hubs[i]; - char *optstr; + VIR_AUTOFREE(char *) optstr = NULL;
virCommandAddArg(cmd, "-device"); if (!(optstr = qemuBuildHubDevStr(def, hub, qemuCaps))) return -1; virCommandAddArg(cmd, optstr); - VIR_FREE(optstr); }
return 0; @@ -5043,7 +5014,7 @@ qemuBuildSCSIiSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, { char *ret = NULL; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; - char *netsource = NULL; + VIR_AUTOFREE(char *) netsource = NULL; VIR_AUTOPTR(virJSONValue) srcprops = NULL; virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi; virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc = &scsisrc->u.iscsi; @@ -5072,7 +5043,6 @@ qemuBuildSCSIiSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, ret = virBufferContentAndReset(&buf);
cleanup: - VIR_FREE(netsource); return ret; }
@@ -5118,8 +5088,8 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, virQEMUCapsPtr qemuCaps) { VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; - char *source = NULL; - char *drivealias = NULL; + VIR_AUTOFREE(char *) source = NULL; + VIR_AUTOFREE(char *) drivealias = NULL; virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi;
if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { @@ -5131,12 +5101,10 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, goto error; virBufferAsprintf(&buf, "file=/dev/%s,if=none,format=raw", source); } - VIR_FREE(source);
if (!(drivealias = qemuAliasFromHostdev(dev))) goto error; virBufferAsprintf(&buf, ",id=%s", drivealias); - VIR_FREE(drivealias);
if (dev->readonly) virBufferAddLit(&buf, ",readonly=on"); @@ -5155,7 +5123,7 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def, { VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; int model = -1; - char *driveAlias; + VIR_AUTOFREE(char *) driveAlias = NULL; const char *contAlias;
model = qemuDomainFindSCSIControllerModel(def, dev->info); @@ -5200,7 +5168,6 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def, if (!(driveAlias = qemuAliasFromHostdev(dev))) goto error; virBufferAsprintf(&buf, ",drive=%s,id=%s", driveAlias, dev->info->alias); - VIR_FREE(driveAlias);
if (dev->info->bootIndex) virBufferAsprintf(&buf, ",bootindex=%u", dev->info->bootIndex); @@ -5222,7 +5189,8 @@ qemuBuildChrChardevFileStr(virLogManagerPtr logManager, const char *appendarg, int appendval) { if (logManager) { - char *fdset, *fdpath; + VIR_AUTOFREE(char *) fdset = NULL; + VIR_AUTOFREE(char *) fdpath = NULL; int flags = 0; int logfd;
@@ -5245,13 +5213,11 @@ qemuBuildChrChardevFileStr(virLogManagerPtr logManager,
virCommandAddArg(cmd, "-add-fd"); virCommandAddArg(cmd, fdset); - VIR_FREE(fdset);
if (!(fdpath = qemuVirCommandGetDevSet(cmd, logfd))) return -1;
virBufferAsprintf(buf, ",%s=%s,%s=on", filearg, fdpath, appendarg); - VIR_FREE(fdpath); } else { virBufferAsprintf(buf, ",%s=", filearg); virQEMUBuildBufferEscapeComma(buf, fileval); @@ -5356,7 +5322,7 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, qemuDomainChrSourcePrivatePtr chrSourcePriv = QEMU_DOMAIN_CHR_SOURCE_PRIVATE(dev); VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; bool telnet; - char *charAlias = NULL; + VIR_AUTOFREE(char *) charAlias = NULL; char *ret = NULL;
if (!(charAlias = qemuAliasChardevFromDevAlias(alias))) @@ -5447,7 +5413,7 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, qemuBuildChrChardevReconnectStr(&buf, &dev->data.tcp.reconnect);
if (dev->data.tcp.haveTLS == VIR_TRISTATE_BOOL_YES) { - char *objalias = NULL; + VIR_AUTOFREE(char *) objalias = NULL; const char *tlsCertEncSecAlias = NULL;
/* Add the secret object first if necessary. The @@ -5470,12 +5436,10 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, cfg->chardevTLSx509verify, tlsCertEncSecAlias, objalias, qemuCaps) < 0) { - VIR_FREE(objalias); goto cleanup; }
virBufferAsprintf(&buf, ",tls-creds=%s", objalias); - VIR_FREE(objalias); } break;
@@ -5544,7 +5508,6 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
ret = virBufferContentAndReset(&buf); cleanup: - VIR_FREE(charAlias); return ret; }
@@ -5556,7 +5519,7 @@ qemuBuildHostdevMediatedDevStr(const virDomainDef *def, VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; virDomainHostdevSubsysMediatedDevPtr mdevsrc = &dev->source.subsys.u.mdev; char *ret = NULL; - char *mdevPath = NULL; + VIR_AUTOFREE(char *) mdevPath = NULL; const char *dev_str = NULL;
if (!(mdevPath = virMediatedDeviceGetSysfsPath(mdevsrc->uuidstr))) @@ -5583,7 +5546,6 @@ qemuBuildHostdevMediatedDevStr(const virDomainDef *def, ret = virBufferContentAndReset(&buf);
cleanup: - VIR_FREE(mdevPath); return ret; }
@@ -5598,7 +5560,7 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, for (i = 0; i < def->nhostdevs; i++) { virDomainHostdevDefPtr hostdev = def->hostdevs[i]; virDomainHostdevSubsysPtr subsys = &hostdev->source.subsys; - char *devstr; + VIR_AUTOFREE(char *) devstr = NULL;
if (hostdev->info->bootIndex) { if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS || @@ -5621,7 +5583,6 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, qemuBuildUSBHostdevDevStr(def, hostdev, qemuCaps))) return -1; virCommandAddArg(cmd, devstr); - VIR_FREE(devstr); }
/* PCI */ @@ -5638,7 +5599,7 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, } }
- char *configfd_name = NULL; + VIR_AUTOFREE(char *) configfd_name = NULL; unsigned int bootIndex = hostdev->info->bootIndex;
/* bootNet will be non-0 if boot order was set and no other @@ -5668,18 +5629,16 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, virCommandAddArg(cmd, "-device"); devstr = qemuBuildPCIHostdevDevStr(def, hostdev, bootIndex, configfd_name, qemuCaps); - VIR_FREE(configfd_name); if (!devstr) return -1; virCommandAddArg(cmd, devstr); - VIR_FREE(devstr); }
/* SCSI */ if (virHostdevIsSCSIDevice(hostdev)) { virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi; - char *drvstr; + VIR_AUTOFREE(char *) drvstr = NULL;
if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc = @@ -5697,13 +5656,11 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, if (!(drvstr = qemuBuildSCSIHostdevDrvStr(hostdev, qemuCaps))) return -1; virCommandAddArg(cmd, drvstr); - VIR_FREE(drvstr);
virCommandAddArg(cmd, "-device"); if (!(devstr = qemuBuildSCSIHostdevDevStr(def, hostdev))) return -1; virCommandAddArg(cmd, devstr); - VIR_FREE(devstr); }
/* SCSI_host */ @@ -5711,7 +5668,7 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, subsys->type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST) { if (hostdev->source.subsys.u.scsi_host.protocol == VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_VHOST) { - char *vhostfdName = NULL; + VIR_AUTOFREE(char *) vhostfdName = NULL; int vhostfd = -1;
if (virSCSIVHostOpenVhostSCSI(&vhostfd) < 0) @@ -5729,14 +5686,10 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, if (!(devstr = qemuBuildSCSIVHostHostdevDevStr(def, hostdev, qemuCaps, - vhostfdName))) { - VIR_FREE(vhostfdName); + vhostfdName))) return -1; - } - virCommandAddArg(cmd, devstr);
- VIR_FREE(vhostfdName); - VIR_FREE(devstr); + virCommandAddArg(cmd, devstr); } }
@@ -5782,7 +5735,6 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, qemuBuildHostdevMediatedDevStr(def, hostdev, qemuCaps))) return -1; virCommandAddArg(cmd, devstr); - VIR_FREE(devstr); } }
@@ -5798,7 +5750,7 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager, virDomainDefPtr def, qemuDomainObjPrivatePtr priv) { - char *chrdev; + VIR_AUTOFREE(char *) chrdev = NULL; unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT | QEMU_BUILD_CHARDEV_UNIX_FD_PASS; if (priv->chardevStdioLogd) @@ -5814,7 +5766,6 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager, return -1; virCommandAddArg(cmd, "-chardev"); virCommandAddArg(cmd, chrdev); - VIR_FREE(chrdev);
virCommandAddArg(cmd, "-mon"); virCommandAddArg(cmd, "chardev=charmonitor,id=monitor,mode=control"); @@ -5963,8 +5914,8 @@ qemuBuildRNGBackendProps(virDomainRNGDefPtr rng, virQEMUCapsPtr qemuCaps, virJSONValuePtr *props) { - char *objAlias = NULL; - char *charBackendAlias = NULL; + VIR_AUTOFREE(char *) objAlias = NULL; + VIR_AUTOFREE(char *) charBackendAlias = NULL; int ret = -1;
if (virAsprintf(&objAlias, "obj%s", rng->info.alias) < 0) @@ -6013,8 +5964,6 @@ qemuBuildRNGBackendProps(virDomainRNGDefPtr rng, ret = 0;
cleanup: - VIR_FREE(objAlias); - VIR_FREE(charBackendAlias); return ret; }
@@ -6585,13 +6534,12 @@ qemuBuildClockCommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps) { size_t i; - char *rtcopt; + VIR_AUTOFREE(char *) rtcopt = NULL;
virCommandAddArg(cmd, "-rtc"); if (!(rtcopt = qemuBuildClockArgStr(&def->clock))) return -1; virCommandAddArg(cmd, rtcopt); - VIR_FREE(rtcopt);
if (def->clock.offset == VIR_DOMAIN_CLOCK_OFFSET_TIMEZONE && def->clock.data.timezone) { @@ -6747,7 +6695,7 @@ qemuBuildBootCommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps) { VIR_AUTOCLEAN(virBuffer) boot_buf = VIR_BUFFER_INITIALIZER; - char *boot_opts_str = NULL; + VIR_AUTOFREE(char *) boot_opts_str = NULL;
if (def->os.bootmenu) { if (def->os.bootmenu == VIR_TRISTATE_BOOL_YES) @@ -6814,7 +6762,6 @@ qemuBuildBootCommandLine(virCommandPtr cmd, return 0;
error: - VIR_FREE(boot_opts_str); return -1; }
Theres's another VIR_FREE(boot_opts_str); Michal

On Wed, Aug 21, 2019 at 09:44:05AM +0200, Michal Privoznik wrote:
On 8/20/19 2:59 PM, Ján Tomko wrote:
Remove the VIR_FREE's from the cleanup sections.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 207 +++++++++++++--------------------------- 1 file changed, 66 insertions(+), 141 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b5448a074f..fe06867a88 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c
Missing: qemuBuildControllersByTypeCommandLine,
Dealt with in a later patch of this series.
qemuBuildSoundCommandLine
I will sent this in a followup series.
qemuBuildRNGCommandLine,
Dealt with in a later patch of this series.
qemuBuildSmbiosCommandLine
Sorry, I can't figure out how to make that function nicer with VIR_AUTOFREE (and I was told not to combine VIR_AUTOFREE with VIR_FREE). Jano
Maybe you are doing that (and other suggestions I have for this patch) in next patches. If so, disregard me.

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index fe06867a88..db8584243c 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -953,7 +953,7 @@ static char * qemuBuildNetworkDriveURI(virStorageSourcePtr src, qemuDomainSecretInfoPtr secinfo) { - virURIPtr uri = NULL; + VIR_AUTOPTR(virURI) uri = NULL; char *ret = NULL; if (!(uri = qemuBlockStorageSourceGetURI(src))) @@ -969,7 +969,6 @@ qemuBuildNetworkDriveURI(virStorageSourcePtr src, ret = virURIFormat(uri); cleanup: - virURIFree(uri); return ret; } -- 2.19.2

Reduce the scope of the variable to get it freed for every controller processed. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index db8584243c..298a1c3fea 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3198,12 +3198,12 @@ qemuBuildControllersByTypeCommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps, virDomainControllerType type) { - char *devstr = NULL; int ret = -1; size_t i; for (i = 0; i < def->ncontrollers; i++) { virDomainControllerDefPtr cont = def->controllers[i]; + VIR_AUTOFREE(char *) devstr = NULL; if (cont->type != type) continue; @@ -3236,7 +3236,6 @@ qemuBuildControllersByTypeCommandLine(virCommandPtr cmd, continue; } - VIR_FREE(devstr); if (qemuBuildControllerDevStr(def, cont, qemuCaps, &devstr) < 0) goto cleanup; @@ -3251,7 +3250,6 @@ qemuBuildControllersByTypeCommandLine(virCommandPtr cmd, ret = 0; cleanup: - VIR_FREE(devstr); return ret; } -- 2.19.2

Use separate variables for the chardev and the device. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 298a1c3fea..67de0fc35e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6022,7 +6022,8 @@ qemuBuildRNGCommandLine(virLogManagerPtr logManager, VIR_AUTOPTR(virJSONValue) props = NULL; virBuffer buf = VIR_BUFFER_INITIALIZER; virDomainRNGDefPtr rng = def->rngs[i]; - char *tmp; + VIR_AUTOFREE(char *) chardev = NULL; + VIR_AUTOFREE(char *) devstr = NULL; int rc; if (!rng->info.alias) { @@ -6033,14 +6034,12 @@ qemuBuildRNGCommandLine(virLogManagerPtr logManager, /* possibly add character device for backend */ if (qemuBuildRNGBackendChrdevStr(logManager, secManager, cmd, cfg, def, - rng, qemuCaps, &tmp, + rng, qemuCaps, &chardev, chardevStdioLogd) < 0) return -1; - if (tmp) { - virCommandAddArgList(cmd, "-chardev", tmp, NULL); - VIR_FREE(tmp); - } + if (chardev) + virCommandAddArgList(cmd, "-chardev", chardev, NULL); if (qemuBuildRNGBackendProps(rng, qemuCaps, &props) < 0) return -1; @@ -6057,10 +6056,9 @@ qemuBuildRNGCommandLine(virLogManagerPtr logManager, if (qemuCommandAddExtDevice(cmd, &rng->info) < 0) return -1; - if (!(tmp = qemuBuildRNGDevStr(def, rng, qemuCaps))) + if (!(devstr = qemuBuildRNGDevStr(def, rng, qemuCaps))) return -1; - virCommandAddArgList(cmd, "-device", tmp, NULL); - VIR_FREE(tmp); + virCommandAddArgList(cmd, "-device", devstr, NULL); } return 0; -- 2.19.2

Instead of getting the string then passing it to virCommand. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 67de0fc35e..cc589a70b2 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7606,7 +7606,6 @@ static int qemuBuildSmpCommandLine(virCommandPtr cmd, virDomainDefPtr def) { - char *smp = NULL; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; unsigned int maxvcpus = virDomainDefGetVcpusMax(def); unsigned int nvcpus = 0; @@ -7642,10 +7641,7 @@ qemuBuildSmpCommandLine(virCommandPtr cmd, if (virBufferCheckError(&buf) < 0) return -1; - smp = virBufferContentAndReset(&buf); - virCommandAddArg(cmd, smp); - VIR_FREE(smp); - + virCommandAddArgBuffer(cmd, &buf); return 0; } -- 2.19.2

That way devstr will only be used for the device string. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index cc589a70b2..6557643dbe 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -9197,6 +9197,7 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager, VIR_AUTOPTR(virJSONValue) memProps = NULL; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; char *devstr = NULL; + VIR_AUTOFREE(char *) chardev = NULL; int rc; unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT | QEMU_BUILD_CHARDEV_UNIX_FD_PASS; @@ -9267,16 +9268,15 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager, VIR_FREE(devstr); if (shmem->server.enabled) { - devstr = qemuBuildChrChardevStr(logManager, secManager, + chardev = qemuBuildChrChardevStr(logManager, secManager, cmd, cfg, def, &shmem->server.chr, shmem->info.alias, qemuCaps, cdevflags); - if (!devstr) + if (!chardev) return -1; - virCommandAddArgList(cmd, "-chardev", devstr, NULL); - VIR_FREE(devstr); + virCommandAddArgList(cmd, "-chardev", chardev, NULL); } return 0; -- 2.19.2

Now that it's only used once. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 6557643dbe..e47f30876e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -9196,7 +9196,7 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager, { VIR_AUTOPTR(virJSONValue) memProps = NULL; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; - char *devstr = NULL; + VIR_AUTOFREE(char *) devstr = NULL; VIR_AUTOFREE(char *) chardev = NULL; int rc; unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT | @@ -9259,13 +9259,10 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager, if (!devstr) return -1; - if (qemuCommandAddExtDevice(cmd, &shmem->info) < 0) { - VIR_FREE(devstr); + if (qemuCommandAddExtDevice(cmd, &shmem->info) < 0) return -1; - } virCommandAddArgList(cmd, "-device", devstr, NULL); - VIR_FREE(devstr); if (shmem->server.enabled) { chardev = qemuBuildChrChardevStr(logManager, secManager, -- 2.19.2

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index e47f30876e..a4df133ca0 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6900,7 +6900,7 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver, { int ret = -1; size_t i; - virCapsPtr caps = NULL; + VIR_AUTOUNREF(virCapsPtr) caps = NULL; virCPUDefPtr cpu = def->cpu; if (!(caps = virQEMUDriverGetCapabilities(driver, false))) @@ -6978,7 +6978,6 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver, ret = 0; cleanup: - virObjectUnref(caps); return ret; } @@ -8486,7 +8485,7 @@ qemuInterfaceVhostuserConnect(virQEMUDriverPtr driver, virQEMUCapsPtr qemuCaps, char **chardev) { - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + VIR_AUTOUNREF(virQEMUDriverConfigPtr) cfg = virQEMUDriverGetConfig(driver); int ret = -1; switch ((virDomainChrType)net->data.vhostuser->type) { @@ -8519,7 +8518,6 @@ qemuInterfaceVhostuserConnect(virQEMUDriverPtr driver, ret = 0; cleanup: - virObjectUnref(cfg); return ret; } -- 2.19.2

On 8/20/19 2:59 PM, Ján Tomko wrote:
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
There is more: qemuBuildHostNetStr, qemuBuildCommandLine. Michal

The recent cleanups allow us to clean up the code a bit. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 741 +++++++++++++++------------------------- 1 file changed, 274 insertions(+), 467 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index a4df133ca0..0e9bd77f62 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -202,7 +202,6 @@ static int qemuBuildMasterKeyCommandLine(virCommandPtr cmd, qemuDomainObjPrivatePtr priv) { - int ret = -1; VIR_AUTOFREE(char *) alias = NULL; VIR_AUTOFREE(char *) path = NULL; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; @@ -225,17 +224,14 @@ qemuBuildMasterKeyCommandLine(virCommandPtr cmd, * existence of socket files before using. */ if (!(path = qemuDomainGetMasterKeyFilePath(priv->libDir))) - goto cleanup; + return -1; virCommandAddArg(cmd, "-object"); virBufferAsprintf(&buf, "secret,id=%s,format=raw,file=", alias); virQEMUBuildBufferEscapeComma(&buf, path); virCommandAddArgBuffer(cmd, &buf); - ret = 0; - - cleanup: - return ret; + return 0; } @@ -298,7 +294,6 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, virDomainDeviceInfoPtr info, virQEMUCapsPtr qemuCaps) { - int ret = -1; VIR_AUTOFREE(char *) devStr = NULL; const char *contAlias = NULL; bool contIsPHB = false; @@ -308,7 +303,7 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, size_t i; if (!(devStr = virPCIDeviceAddressAsString(&info->addr.pci))) - goto cleanup; + return -1; for (i = 0; i < domainDef->ncontrollers; i++) { virDomainControllerDefPtr cont = domainDef->controllers[i]; @@ -324,7 +319,7 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, "controller with index %u required " "for device at address %s"), info->addr.pci.bus, devStr); - goto cleanup; + return -1; } if (virDomainDeviceAliasIsUserAlias(contAlias)) { @@ -350,7 +345,7 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, "controller with index %u required " "for device at address %s"), info->addr.pci.bus, devStr); - goto cleanup; + return -1; } if (contIsPHB && contTargetIndex > 0) { @@ -376,7 +371,7 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, if (!(contAlias = virDomainControllerAliasFind(domainDef, VIR_DOMAIN_CONTROLLER_TYPE_USB, info->addr.usb.bus))) - goto cleanup; + return -1; virBufferAsprintf(buf, ",bus=%s.0", contAlias); if (virDomainUSBAddressPortIsValid(info->addr.usb.port)) { virBufferAddLit(buf, ",port="); @@ -397,9 +392,7 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, info->addr.isa.irq); } - ret = 0; - cleanup: - return ret; + return 0; } @@ -733,22 +726,18 @@ qemuBuildObjectSecretCommandLine(virCommandPtr cmd, qemuDomainSecretInfoPtr secinfo) { VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; - int ret = -1; VIR_AUTOPTR(virJSONValue) props = NULL; if (qemuBuildSecretInfoProps(secinfo, &props) < 0) return -1; if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) - goto cleanup; + return -1; virCommandAddArg(cmd, "-object"); virCommandAddArgBuffer(cmd, &buf); - ret = 0; - - cleanup: - return ret; + return 0; } @@ -929,23 +918,19 @@ qemuBuildTLSx509CommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps) { VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; - int ret = -1; VIR_AUTOPTR(virJSONValue) props = NULL; if (qemuBuildTLSx509BackendProps(tlspath, isListen, verifypeer, alias, certEncSecretAlias, qemuCaps, &props) < 0) - goto cleanup; + return -1; if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) - goto cleanup; + return -1; virCommandAddArg(cmd, "-object"); virCommandAddArgBuffer(cmd, &buf); - ret = 0; - - cleanup: - return ret; + return 0; } @@ -954,22 +939,18 @@ qemuBuildNetworkDriveURI(virStorageSourcePtr src, qemuDomainSecretInfoPtr secinfo) { VIR_AUTOPTR(virURI) uri = NULL; - char *ret = NULL; if (!(uri = qemuBlockStorageSourceGetURI(src))) - goto cleanup; + return NULL; if (src->hosts->socket && virAsprintf(&uri->query, "socket=%s", src->hosts->socket) < 0) - goto cleanup; + return NULL; if (qemuBuildGeneralSecinfoURI(uri, secinfo) < 0) - goto cleanup; - - ret = virURIFormat(uri); + return NULL; - cleanup: - return ret; + return virURIFormat(uri); } @@ -977,9 +958,9 @@ static char * qemuBuildNetworkDriveStr(virStorageSourcePtr src, qemuDomainSecretInfoPtr secinfo) { - char *ret = NULL; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; size_t i; + char *ret = NULL; switch ((virStorageNetProtocol) src->protocol) { case VIR_STORAGE_NET_PROTOCOL_NBD: @@ -987,7 +968,7 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, virReportError(VIR_ERR_INTERNAL_ERROR, _("protocol '%s' accepts only one host"), virStorageNetProtocolTypeToString(src->protocol)); - goto cleanup; + return NULL; } if (!((src->hosts->name && strchr(src->hosts->name, ':')) || @@ -1010,7 +991,7 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("socket attribute required for " "unix transport")); - goto cleanup; + return NULL; } virBufferAsprintf(&buf, "unix:%s", src->hosts->socket); @@ -1020,17 +1001,16 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, virReportError(VIR_ERR_INTERNAL_ERROR, _("nbd does not support transport '%s'"), virStorageNetHostTransportTypeToString(src->hosts->transport)); - goto cleanup; + return NULL; } if (src->path) virBufferAsprintf(&buf, ":exportname=%s", src->path); if (virBufferCheckError(&buf) < 0) - goto cleanup; + return NULL; - ret = virBufferContentAndReset(&buf); - goto cleanup; + return virBufferContentAndReset(&buf); } /* NBD code uses URI formatting scheme as others in some cases */ ret = qemuBuildNetworkDriveURI(src, secinfo); @@ -1050,21 +1030,21 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, if (!src->path) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing disk source for 'sheepdog' protocol")); - goto cleanup; + return NULL; } if (src->nhosts == 0) { if (virAsprintf(&ret, "sheepdog:%s", src->path) < 0) - goto cleanup; + return NULL; } else if (src->nhosts == 1) { if (virAsprintf(&ret, "sheepdog:%s:%u:%s", src->hosts->name, src->hosts->port, src->path) < 0) - goto cleanup; + return NULL; } else { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("protocol 'sheepdog' accepts up to one host")); - goto cleanup; + return NULL; } break; @@ -1074,7 +1054,7 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("':' not allowed in RBD source volume name '%s'"), src->path); - goto cleanup; + return NULL; } virBufferStrcat(&buf, "rbd:", src->volume, "/", src->path, NULL); @@ -1083,7 +1063,7 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, virBufferEscape(&buf, '\\', ":", "@%s", src->snapshot); if (qemuBuildRBDSecinfoURI(&buf, secinfo) < 0) - goto cleanup; + return NULL; if (src->nhosts > 0) { virBufferAddLit(&buf, ":mon_host="); @@ -1107,7 +1087,7 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, virBufferEscape(&buf, '\\', ":", ":conf=%s", src->configFile); if (virBufferCheckError(&buf) < 0) - goto cleanup; + return NULL; ret = virBufferContentAndReset(&buf); break; @@ -1115,23 +1095,21 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, case VIR_STORAGE_NET_PROTOCOL_VXHS: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("VxHS protocol does not support URI syntax")); - goto cleanup; + return NULL; case VIR_STORAGE_NET_PROTOCOL_SSH: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("'ssh' protocol is not yet supported")); - goto cleanup; + return NULL; case VIR_STORAGE_NET_PROTOCOL_LAST: case VIR_STORAGE_NET_PROTOCOL_NONE: virReportError(VIR_ERR_INTERNAL_ERROR, _("Unexpected network protocol '%s'"), virStorageNetProtocolTypeToString(src->protocol)); - goto cleanup; + return NULL; } - cleanup: - return ret; } @@ -1142,7 +1120,6 @@ qemuGetDriveSourceString(virStorageSourcePtr src, char **source) { int actualType = virStorageSourceGetActualType(src); - int ret = -1; *source = NULL; @@ -1155,13 +1132,13 @@ qemuGetDriveSourceString(virStorageSourcePtr src, case VIR_STORAGE_TYPE_FILE: case VIR_STORAGE_TYPE_DIR: if (VIR_STRDUP(*source, src->path) < 0) - goto cleanup; + return -1; break; case VIR_STORAGE_TYPE_NETWORK: if (!(*source = qemuBuildNetworkDriveStr(src, secinfo))) - goto cleanup; + return -1; break; case VIR_STORAGE_TYPE_VOLUME: @@ -1170,10 +1147,7 @@ qemuGetDriveSourceString(virStorageSourcePtr src, break; } - ret = 0; - - cleanup: - return ret; + return 0; } @@ -1510,18 +1484,16 @@ qemuCheckDiskConfig(virDomainDiskDefPtr disk, bool qemuCheckFips(void) { - bool ret = false; - if (virFileExists("/proc/sys/crypto/fips_enabled")) { VIR_AUTOFREE(char *) buf = NULL; if (virFileReadAll("/proc/sys/crypto/fips_enabled", 10, &buf) < 0) - return ret; + return false; if (STREQ(buf, "1\n")) - ret = true; + return true; } - return ret; + return false; } @@ -1635,7 +1607,6 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, VIR_AUTOPTR(virJSONValue) srcprops = NULL; VIR_AUTOFREE(char *) source = NULL; bool rawluks = false; - int ret = -1; if (srcpriv) { secinfo = srcpriv->secinfo; @@ -1644,19 +1615,18 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, if (qemuDiskSourceNeedsProps(disk->src, qemuCaps) && !(srcprops = qemuDiskSourceGetProps(disk->src))) - goto cleanup; + return -1; if (!srcprops && qemuGetDriveSourceString(disk->src, secinfo, &source) < 0) - goto cleanup; + return -1; /* nothing to format if the drive is empty */ if (!(source || srcprops) || ((disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY || disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) && disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN)) { - ret = 0; - goto cleanup; + return 0; } if (actualType == VIR_STORAGE_TYPE_BLOCK && @@ -1665,7 +1635,7 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, disk->src->type == VIR_STORAGE_TYPE_VOLUME ? _("tray status 'open' is invalid for block type volume") : _("tray status 'open' is invalid for block type disk")); - goto cleanup; + return -1; } if (source) { @@ -1688,10 +1658,10 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, virBufferAsprintf(buf, ",file.debug=%d", disk->src->debugLevel); if (qemuBuildDriveSourcePR(buf, disk) < 0) - goto cleanup; + return -1; } else { if (!(source = virQEMUBuildDriveCommandlineFromJSON(srcprops))) - goto cleanup; + return -1; virBufferAdd(buf, source, -1); } @@ -1716,10 +1686,7 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, virBufferAsprintf(buf, "format=%s,", qemuformat); } - ret = 0; - - cleanup: - return ret; + return 0; } @@ -2392,7 +2359,6 @@ qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd, VIR_AUTOFREE(char *) backendStr = NULL; VIR_AUTOFREE(char *) bootindexStr = NULL; size_t i; - int ret = -1; virBufferAddLit(&fdc_opts, "isa-fdc,"); @@ -2418,16 +2384,16 @@ qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd, if (bootindex && virAsprintf(&bootindexStr, "bootindex%c=%u", driveLetter, bootindex) < 0) - goto cleanup; + return -1; /* with -blockdev we setup the floppy device and it's backend with -device */ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV)) { if (qemuDomainDiskGetBackendAlias(disk, qemuCaps, &backendAlias) < 0) - goto cleanup; + return -1; if (backendAlias && virAsprintf(&backendStr, "drive%c=%s", driveLetter, backendAlias) < 0) - goto cleanup; + return -1; } if (!explicitfdc) { @@ -2457,10 +2423,7 @@ qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd, virCommandAddArgBuffer(cmd, &fdc_opts); } - ret = 0; - - cleanup: - return ret; + return 0; } @@ -2922,7 +2885,7 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_NON_TRANSITIONAL: if (qemuBuildVirtioDevStr(&buf, "virtio-scsi", qemuCaps, VIR_DOMAIN_DEVICE_CONTROLLER, def) < 0) { - goto error; + return -1; } if (def->iothread) { @@ -2931,7 +2894,7 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, } if (qemuBuildVirtioOptionsStr(&buf, def->virtio, qemuCaps) < 0) - goto error; + return -1; break; case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC: virBufferAddLit(&buf, "lsi"); @@ -2951,13 +2914,13 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported controller model: %s"), virDomainControllerModelSCSITypeToString(def->model)); - goto error; + return -1; case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, _("Unexpected SCSI controller model %d"), def->model); - goto error; + return -1; } virBufferAsprintf(&buf, ",id=%s", def->info.alias); break; @@ -2965,7 +2928,7 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: if (qemuBuildVirtioDevStr(&buf, "virtio-serial", qemuCaps, VIR_DOMAIN_DEVICE_CONTROLLER, def) < 0) { - goto error; + return -1; } virBufferAsprintf(&buf, ",id=%s", def->info.alias); @@ -2978,7 +2941,7 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, def->opts.vioserial.vectors); } if (qemuBuildVirtioOptionsStr(&buf, def->virtio, qemuCaps) < 0) - goto error; + return -1; break; case VIR_DOMAIN_CONTROLLER_TYPE_CCID: @@ -2991,7 +2954,7 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, case VIR_DOMAIN_CONTROLLER_TYPE_USB: if (qemuBuildUSBControllerDevStr(domainDef, def, qemuCaps, &buf) == -1) - goto error; + return -1; break; @@ -3003,7 +2966,7 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, if (def->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT && pciopts->modelName == VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_SPAPR_PCI_HOST_BRIDGE && pciopts->targetIndex == 0) { - goto done; + return 0; } if (!modelName) { @@ -3051,13 +3014,13 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Unsupported PCI Express root controller")); - goto error; + return -1; case VIR_DOMAIN_CONTROLLER_MODEL_PCI_DEFAULT: case VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, _("Unexpected PCI controller model %d"), def->model); - goto error; + return -1; } break; } @@ -3069,7 +3032,7 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported controller type: %s"), virDomainControllerTypeToString(def->type)); - goto error; + return -1; } if (def->queues) @@ -3084,17 +3047,13 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, qemuBuildIoEventFdStr(&buf, def->ioeventfd, qemuCaps); if (qemuBuildDeviceAddressStr(&buf, domainDef, &def->info, qemuCaps) < 0) - goto error; + return -1; - done: if (virBufferCheckError(&buf) < 0) - goto error; + return -1; *devstr = virBufferContentAndReset(&buf); return 0; - - error: - return -1; } @@ -3198,7 +3157,6 @@ qemuBuildControllersByTypeCommandLine(virCommandPtr cmd, virQEMUCapsPtr qemuCaps, virDomainControllerType type) { - int ret = -1; size_t i; for (i = 0; i < def->ncontrollers; i++) { @@ -3237,20 +3195,18 @@ qemuBuildControllersByTypeCommandLine(virCommandPtr cmd, } if (qemuBuildControllerDevStr(def, cont, qemuCaps, &devstr) < 0) - goto cleanup; + return -1; if (devstr) { if (qemuCommandAddExtDevice(cmd, &cont->info) < 0) - goto cleanup; + return -1; virCommandAddArg(cmd, "-device"); virCommandAddArg(cmd, devstr); } } - ret = 0; - cleanup: - return ret; + return 0; } @@ -3286,20 +3242,16 @@ qemuBuildControllersCommandLine(virCommandPtr cmd, VIR_DOMAIN_CONTROLLER_TYPE_SATA, VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL, }; - int ret = -1; for (i = 0; i < ARRAY_CARDINALITY(contOrder); i++) { if (qemuBuildControllersByTypeCommandLine(cmd, def, qemuCaps, contOrder[i]) < 0) - goto cleanup; + return -1; } if (qemuBuildLegacyUSBControllerCommandLine(cmd, def) < 0) - goto cleanup; - - ret = 0; + return -1; - cleanup: - return ret; + return 0; } @@ -3681,7 +3633,6 @@ qemuBuildMemoryDimmBackendStr(virBufferPtr buf, { VIR_AUTOPTR(virJSONValue) props = NULL; VIR_AUTOFREE(char *) alias = NULL; - int ret = -1; if (!mem->info.alias) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", @@ -3690,20 +3641,16 @@ qemuBuildMemoryDimmBackendStr(virBufferPtr buf, } if (virAsprintf(&alias, "mem%s", mem->info.alias) < 0) - goto cleanup; + return -1; if (qemuBuildMemoryBackendProps(&props, alias, cfg, priv, def, mem, true) < 0) - goto cleanup; + return -1; if (virQEMUBuildObjectCommandlineFromJSON(buf, props) < 0) - goto cleanup; - - ret = 0; - - cleanup: + return -1; - return ret; + return 0; } @@ -4121,20 +4068,17 @@ qemuBuildWatchdogDevStr(const virDomainDef *def, if (!model) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing watchdog model")); - goto error; + return NULL; } virBufferAsprintf(&buf, "%s,id=%s", model, dev->info.alias); if (qemuBuildDeviceAddressStr(&buf, def, &dev->info, qemuCaps) < 0) - goto error; + return NULL; if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -4194,12 +4138,12 @@ qemuBuildMemballoonCommandLine(virCommandPtr cmd, if (qemuBuildVirtioDevStr(&buf, "virtio-balloon", qemuCaps, VIR_DOMAIN_DEVICE_MEMBALLOON, def->memballoon) < 0) { - goto error; + return -1; } virBufferAsprintf(&buf, ",id=%s", def->memballoon->info.alias); if (qemuBuildDeviceAddressStr(&buf, def, &def->memballoon->info, qemuCaps) < 0) - goto error; + return -1; if (def->memballoon->autodeflate != VIR_TRISTATE_SWITCH_ABSENT) { virBufferAsprintf(&buf, ",deflate-on-oom=%s", @@ -4207,17 +4151,14 @@ qemuBuildMemballoonCommandLine(virCommandPtr cmd, } if (qemuBuildVirtioOptionsStr(&buf, def->memballoon->virtio, qemuCaps) < 0) - goto error; + return -1; if (qemuCommandAddExtDevice(cmd, &def->memballoon->info) < 0) - goto error; + return -1; virCommandAddArg(cmd, "-device"); virCommandAddArgBuffer(cmd, &buf); return 0; - - error: - return -1; } @@ -4233,16 +4174,13 @@ qemuBuildNVRAMDevStr(virDomainNVRAMDefPtr dev) } else { virReportError(VIR_ERR_XML_ERROR, "%s", _("nvram address type must be spaprvio")); - goto error; + return NULL; } if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -4289,31 +4227,31 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, case VIR_DOMAIN_INPUT_TYPE_MOUSE: if (qemuBuildVirtioDevStr(&buf, "virtio-mouse", qemuCaps, VIR_DOMAIN_DEVICE_INPUT, dev) < 0) { - goto error; + return NULL; } break; case VIR_DOMAIN_INPUT_TYPE_TABLET: if (qemuBuildVirtioDevStr(&buf, "virtio-tablet", qemuCaps, VIR_DOMAIN_DEVICE_INPUT, dev) < 0) { - goto error; + return NULL; } break; case VIR_DOMAIN_INPUT_TYPE_KBD: if (qemuBuildVirtioDevStr(&buf, "virtio-keyboard", qemuCaps, VIR_DOMAIN_DEVICE_INPUT, dev) < 0) { - goto error; + return NULL; } break; case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: if (qemuBuildVirtioDevStr(&buf, "virtio-input-host", qemuCaps, VIR_DOMAIN_DEVICE_INPUT, dev) < 0) { - goto error; + return NULL; } break; case VIR_DOMAIN_INPUT_TYPE_LAST: default: virReportEnumRangeError(virDomainInputType, dev->type); - goto error; + return NULL; } virBufferAsprintf(&buf, ",id=%s", dev->info.alias); @@ -4324,18 +4262,15 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, } if (qemuBuildDeviceAddressStr(&buf, def, &dev->info, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildVirtioOptionsStr(&buf, dev->virtio, qemuCaps) < 0) - goto error; + return NULL; if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } static char * @@ -4357,22 +4292,19 @@ qemuBuildUSBInputDevStr(const virDomainDef *def, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("usb keyboard is not supported by this " "QEMU binary")); - goto error; + return NULL; } virBufferAsprintf(&buf, "usb-kbd,id=%s", dev->info.alias); break; } if (qemuBuildDeviceAddressStr(&buf, def, &dev->info, qemuCaps) < 0) - goto error; + return NULL; if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -4449,7 +4381,7 @@ qemuBuildSoundDevStr(const virDomainDef *def, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("usb-audio controller is not supported " "by this QEMU binary")); - goto error; + return NULL; } break; case VIR_DOMAIN_SOUND_MODEL_ICH9: @@ -4458,7 +4390,7 @@ qemuBuildSoundDevStr(const virDomainDef *def, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("The ich9-intel-hda audio controller " "is not supported in this QEMU binary")); - goto error; + return NULL; } break; case VIR_DOMAIN_SOUND_MODEL_SB16: @@ -4469,20 +4401,17 @@ qemuBuildSoundDevStr(const virDomainDef *def, virReportError(VIR_ERR_INTERNAL_ERROR, _("sound card model '%s' is not supported by qemu"), virDomainSoundModelTypeToString(sound->model)); - goto error; + return NULL; } virBufferAsprintf(&buf, "%s,id=%s", model, sound->info.alias); if (qemuBuildDeviceAddressStr(&buf, def, &sound->info, qemuCaps) < 0) - goto error; + return NULL; if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -4518,16 +4447,13 @@ qemuBuildSoundCodecStr(virDomainSoundDefPtr sound, if (flags == -1 || !virQEMUCapsGet(qemuCaps, flags)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("%s not supported in this QEMU binary"), stype); - goto error; + return NULL; } virBufferAsprintf(&buf, "%s,id=%s-codec%d,bus=%s.0,cad=%d", stype, sound->info.alias, codec->cad, sound->info.alias, codec->cad); return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -4615,13 +4541,13 @@ qemuBuildDeviceVideoStr(const virDomainDef *def, virReportError(VIR_ERR_INTERNAL_ERROR, _("invalid model for video type '%s'"), virDomainVideoTypeToString(video->type)); - goto error; + return NULL; } if (STREQ(model, "virtio-gpu")) { if (qemuBuildVirtioDevStr(&buf, "virtio-gpu", qemuCaps, VIR_DOMAIN_DEVICE_VIDEO, video) < 0) { - goto error; + return NULL; } } else { virBufferAsprintf(&buf, "%s", model); @@ -4676,18 +4602,15 @@ qemuBuildDeviceVideoStr(const virDomainDef *def, } if (qemuBuildDeviceAddressStr(&buf, def, &video->info, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildVirtioOptionsStr(&buf, video->virtio, qemuCaps) < 0) - goto error; + return NULL; if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -4870,7 +4793,7 @@ qemuBuildPCIHostdevDevStr(const virDomainDef *def, virReportError(VIR_ERR_INTERNAL_ERROR, _("invalid PCI passthrough type '%s'"), virDomainHostdevSubsysPCIBackendTypeToString(backend)); - goto error; + return NULL; } virBufferAddLit(&buf, ",host="); @@ -4886,17 +4809,14 @@ qemuBuildPCIHostdevDevStr(const virDomainDef *def, if (bootIndex) virBufferAsprintf(&buf, ",bootindex=%u", bootIndex); if (qemuBuildDeviceAddressStr(&buf, def, dev->info, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildRomStr(&buf, dev->info) < 0) - goto error; + return NULL; if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -4924,15 +4844,12 @@ qemuBuildUSBHostdevDevStr(const virDomainDef *def, virBufferAsprintf(&buf, ",bootindex=%u", dev->info->bootIndex); if (qemuBuildDeviceAddressStr(&buf, def, dev->info, qemuCaps) < 0) - goto error; + return NULL; if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -4947,27 +4864,24 @@ qemuBuildHubDevStr(const virDomainDef *def, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("hub type %s not supported"), virDomainHubTypeToString(dev->type)); - goto error; + return NULL; } if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_USB_HUB)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("usb-hub not supported by QEMU binary")); - goto error; + return NULL; } virBufferAddLit(&buf, "usb-hub"); virBufferAsprintf(&buf, ",id=%s", dev->info.alias); if (qemuBuildDeviceAddressStr(&buf, def, &dev->info, qemuCaps) < 0) - goto error; + return NULL; if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -5009,7 +4923,6 @@ static char * qemuBuildSCSIiSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, virQEMUCapsPtr qemuCaps) { - char *ret = NULL; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; VIR_AUTOFREE(char *) netsource = NULL; VIR_AUTOPTR(virJSONValue) srcprops = NULL; @@ -5020,27 +4933,24 @@ qemuBuildSCSIiSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, if (qemuDiskSourceNeedsProps(iscsisrc->src, qemuCaps)) { if (!(srcprops = qemuDiskSourceGetProps(iscsisrc->src))) - goto cleanup; + return NULL; if (!(netsource = virQEMUBuildDriveCommandlineFromJSON(srcprops))) - goto cleanup; + return NULL; virBufferAsprintf(&buf, "%s,if=none,format=raw", netsource); } else { /* Rather than pull what we think we want - use the network disk code */ if (!(netsource = qemuBuildNetworkDriveStr(iscsisrc->src, srcPriv ? srcPriv->secinfo : NULL))) - goto cleanup; + return NULL; virBufferAddLit(&buf, "file="); virQEMUBuildBufferEscapeComma(&buf, netsource); virBufferAddLit(&buf, ",if=none,format=raw"); } if (virBufferCheckError(&buf) < 0) - goto cleanup; - - ret = virBufferContentAndReset(&buf); + return NULL; - cleanup: - return ret; + return virBufferContentAndReset(&buf); } char * @@ -5055,12 +4965,12 @@ qemuBuildSCSIVHostHostdevDevStr(const virDomainDef *def, if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VHOST_SCSI)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("This QEMU doesn't support vhost-scsi devices")); - goto cleanup; + return NULL; } if (qemuBuildVirtioDevStr(&buf, "vhost-scsi", qemuCaps, VIR_DOMAIN_DEVICE_HOSTDEV, dev) < 0) { - goto cleanup; + return NULL; } virBufferAsprintf(&buf, ",wwpn=%s,vhostfd=%s,id=%s", @@ -5069,15 +4979,12 @@ qemuBuildSCSIVHostHostdevDevStr(const virDomainDef *def, dev->info->alias); if (qemuBuildDeviceAddressStr(&buf, def, dev->info, qemuCaps) < 0) - goto cleanup; + return NULL; if (virBufferCheckError(&buf) < 0) - goto cleanup; + return NULL; return virBufferContentAndReset(&buf); - - cleanup: - return NULL; } char * @@ -5091,27 +4998,25 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { if (!(source = qemuBuildSCSIiSCSIHostdevDrvStr(dev, qemuCaps))) - goto error; + return NULL; virBufferAdd(&buf, source, -1); } else { if (!(source = qemuBuildSCSIHostHostdevDrvStr(dev))) - goto error; + return NULL; virBufferAsprintf(&buf, "file=/dev/%s,if=none,format=raw", source); } if (!(drivealias = qemuAliasFromHostdev(dev))) - goto error; + return NULL; virBufferAsprintf(&buf, ",id=%s", drivealias); if (dev->readonly) virBufferAddLit(&buf, ",readonly=on"); if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - error: - return NULL; } char * @@ -5125,21 +5030,21 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def, model = qemuDomainFindSCSIControllerModel(def, dev->info); if (model < 0) - goto error; + return NULL; if (model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC) { if (dev->info->addr.drive.target != 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("target must be 0 for scsi host device " "if its controller model is 'lsilogic'")); - goto error; + return NULL; } if (dev->info->addr.drive.unit > 7) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("unit must be not more than 7 for scsi host " "device if its controller model is 'lsilogic'")); - goto error; + return NULL; } } @@ -5147,7 +5052,7 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def, if (!(contAlias = virDomainControllerAliasFind(def, VIR_DOMAIN_CONTROLLER_TYPE_SCSI, dev->info->addr.drive.controller))) - goto error; + return NULL; if (model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC) { virBufferAsprintf(&buf, ",bus=%s.%d,scsi-id=%d", @@ -5163,18 +5068,16 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def, } if (!(driveAlias = qemuAliasFromHostdev(dev))) - goto error; + return NULL; virBufferAsprintf(&buf, ",drive=%s,id=%s", driveAlias, dev->info->alias); if (dev->info->bootIndex) virBufferAsprintf(&buf, ",bootindex=%u", dev->info->bootIndex); if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - error: - return NULL; } static int @@ -5320,10 +5223,9 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; bool telnet; VIR_AUTOFREE(char *) charAlias = NULL; - char *ret = NULL; if (!(charAlias = qemuAliasChardevFromDevAlias(alias))) - goto cleanup; + return NULL; switch (dev->type) { case VIR_DOMAIN_CHR_TYPE_NULL: @@ -5352,14 +5254,14 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, !virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_FILE_APPEND)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("append not supported in this QEMU binary")); - goto cleanup; + return NULL; } if (qemuBuildChrChardevFileStr(flags & QEMU_BUILD_CHARDEV_FILE_LOGD ? logManager : NULL, cmd, def, &buf, "path", dev->data.file.path, "append", dev->data.file.append) < 0) - goto cleanup; + return NULL; break; case VIR_DOMAIN_CHR_TYPE_PIPE: @@ -5420,20 +5322,20 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, if (chrSourcePriv && chrSourcePriv->secinfo) { if (qemuBuildObjectSecretCommandLine(cmd, chrSourcePriv->secinfo) < 0) - goto cleanup; + return NULL; tlsCertEncSecAlias = chrSourcePriv->secinfo->s.aes.alias; } if (!(objalias = qemuAliasTLSObjFromSrcAlias(charAlias))) - goto cleanup; + return NULL; if (qemuBuildTLSx509CommandLine(cmd, cfg->chardevTLSx509certdir, dev->data.tcp.listen, cfg->chardevTLSx509verify, tlsCertEncSecAlias, objalias, qemuCaps) < 0) { - goto cleanup; + return NULL; } virBufferAsprintf(&buf, ",tls-creds=%s", objalias); @@ -5446,14 +5348,14 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, (flags & QEMU_BUILD_CHARDEV_UNIX_FD_PASS) && virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS)) { if (qemuSecuritySetSocketLabel(secManager, (virDomainDefPtr)def) < 0) - goto cleanup; + return NULL; int fd = qemuOpenChrChardevUNIXSocket(dev); if (qemuSecurityClearSocketLabel(secManager, (virDomainDefPtr)def) < 0) { VIR_FORCE_CLOSE(fd); - goto cleanup; + return NULL; } if (fd < 0) - goto cleanup; + return NULL; virBufferAsprintf(&buf, ",fd=%d", fd); @@ -5485,27 +5387,25 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unsupported chardev '%s'"), virDomainChrTypeToString(dev->type)); - goto cleanup; + return NULL; } if (dev->logfile) { if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_LOGFILE)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("logfile not supported in this QEMU binary")); - goto cleanup; + return NULL; } if (qemuBuildChrChardevFileStr(logManager, cmd, def, &buf, "logfile", dev->logfile, "logappend", dev->logappend) < 0) - goto cleanup; + return NULL; } if (virBufferCheckError(&buf) < 0) - goto cleanup; + return NULL; - ret = virBufferContentAndReset(&buf); - cleanup: - return ret; + return virBufferContentAndReset(&buf); } char * @@ -5515,17 +5415,16 @@ qemuBuildHostdevMediatedDevStr(const virDomainDef *def, { VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; virDomainHostdevSubsysMediatedDevPtr mdevsrc = &dev->source.subsys.u.mdev; - char *ret = NULL; VIR_AUTOFREE(char *) mdevPath = NULL; const char *dev_str = NULL; if (!(mdevPath = virMediatedDeviceGetSysfsPath(mdevsrc->uuidstr))) - goto cleanup; + return NULL; dev_str = virMediatedDeviceModelTypeToString(mdevsrc->model); if (!dev_str) - goto cleanup; + return NULL; virBufferAdd(&buf, dev_str, -1); virBufferAsprintf(&buf, ",id=%s,sysfsdev=%s", dev->info->alias, mdevPath); @@ -5535,15 +5434,12 @@ qemuBuildHostdevMediatedDevStr(const virDomainDef *def, virTristateSwitchTypeToString(mdevsrc->display)); if (qemuBuildDeviceAddressStr(&buf, def, dev->info, qemuCaps) < 0) - goto cleanup; + return NULL; if (virBufferCheckError(&buf) < 0) - goto cleanup; - - ret = virBufferContentAndReset(&buf); + return NULL; - cleanup: - return ret; + return virBufferContentAndReset(&buf); } static int @@ -5798,13 +5694,13 @@ qemuBuildVirtioSerialPortDevStr(const virDomainDef *def, if (dev->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_SERIAL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("virtio serial device has invalid address type")); - goto error; + return NULL; } contAlias = virDomainControllerAliasFind(def, VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL, dev->info.addr.vioserial.controller); if (!contAlias) - goto error; + return NULL; virBufferAsprintf(&buf, ",bus=%s.%d,nr=%d", contAlias, dev->info.addr.vioserial.bus, @@ -5818,7 +5714,7 @@ qemuBuildVirtioSerialPortDevStr(const virDomainDef *def, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported spicevmc target name '%s'"), dev->target.name); - goto error; + return NULL; } virBufferAsprintf(&buf, ",chardev=char%s,id=%s", @@ -5830,12 +5726,9 @@ qemuBuildVirtioSerialPortDevStr(const virDomainDef *def, ? dev->target.name : "com.redhat.spice.0"); } if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } static char * @@ -5854,17 +5747,14 @@ qemuBuildSclpDevStr(virDomainChrDefPtr dev) } else { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Cannot use slcp with devices other than console")); - goto error; + return NULL; } virBufferAsprintf(&buf, ",chardev=char%s,id=%s", dev->info.alias, dev->info.alias); if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -5913,10 +5803,9 @@ qemuBuildRNGBackendProps(virDomainRNGDefPtr rng, { VIR_AUTOFREE(char *) objAlias = NULL; VIR_AUTOFREE(char *) charBackendAlias = NULL; - int ret = -1; if (virAsprintf(&objAlias, "obj%s", rng->info.alias) < 0) - goto cleanup; + return -1; switch ((virDomainRNGBackend) rng->backend) { case VIR_DOMAIN_RNG_BACKEND_RANDOM: @@ -5924,13 +5813,13 @@ qemuBuildRNGBackendProps(virDomainRNGDefPtr rng, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this qemu doesn't support the rng-random " "backend")); - goto cleanup; + return -1; } if (qemuMonitorCreateObjectProps(props, "rng-random", objAlias, "s:filename", rng->source.file, NULL) < 0) - goto cleanup; + return -1; break; @@ -5939,29 +5828,26 @@ qemuBuildRNGBackendProps(virDomainRNGDefPtr rng, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this qemu doesn't support the rng-egd " "backend")); - goto cleanup; + return -1; } if (!(charBackendAlias = qemuAliasChardevFromDevAlias(rng->info.alias))) - goto cleanup; + return -1; if (qemuMonitorCreateObjectProps(props, "rng-egd", objAlias, "s:chardev", charBackendAlias, NULL) < 0) - goto cleanup; + return -1; break; case VIR_DOMAIN_RNG_BACKEND_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("unknown rng-random backend")); - goto cleanup; + return -1; } - ret = 0; - - cleanup: - return ret; + return 0; } @@ -5974,11 +5860,11 @@ qemuBuildRNGDevStr(const virDomainDef *def, if (!qemuDomainCheckCCWS390AddressSupport(def, &dev->info, qemuCaps, dev->source.file)) - goto error; + return NULL; if (qemuBuildVirtioDevStr(&buf, "virtio-rng", qemuCaps, VIR_DOMAIN_DEVICE_RNG, dev) < 0) { - goto error; + return NULL; } virBufferAsprintf(&buf, ",rng=obj%s,id=%s", @@ -5993,17 +5879,14 @@ qemuBuildRNGDevStr(const virDomainDef *def, } if (qemuBuildVirtioOptionsStr(&buf, dev->virtio, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildDeviceAddressStr(&buf, def, &dev->info, qemuCaps) < 0) - goto error; + return NULL; if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -6194,12 +6077,9 @@ qemuBuildSmbiosBaseBoardStr(virSysinfoBaseBoardDefPtr def) } if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -6258,12 +6138,9 @@ qemuBuildSmbiosChassisStr(virSysinfoChassisDefPtr def) } if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -6437,7 +6314,7 @@ qemuBuildClockArgStr(virDomainClockDefPtr def) * startup). */ if (virTimeLocalOffsetFromUTC(&localOffset) < 0) - goto error; + return NULL; def->data.variable.adjustment += localOffset; def->data.variable.basis = VIR_DOMAIN_CLOCK_BASIS_UTC; } @@ -6466,7 +6343,7 @@ qemuBuildClockArgStr(virDomainClockDefPtr def) virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unsupported clock offset '%s'"), virDomainClockOffsetTypeToString(def->offset)); - goto error; + return NULL; } /* Look for an 'rtc' timer element, and add in appropriate @@ -6480,7 +6357,7 @@ qemuBuildClockArgStr(virDomainClockDefPtr def) virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unsupported rtc timer track '%s'"), virDomainTimerTrackTypeToString(def->timers[i]->track)); - goto error; + return NULL; case VIR_DOMAIN_TIMER_TRACK_GUEST: virBufferAddLit(&buf, ",clock=vm"); break; @@ -6504,19 +6381,16 @@ qemuBuildClockArgStr(virDomainClockDefPtr def) virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unsupported rtc timer tickpolicy '%s'"), virDomainTimerTickpolicyTypeToString(def->timers[i]->tickpolicy)); - goto error; + return NULL; } break; /* no need to check other timers - there is only one rtc */ } } if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -6704,7 +6578,7 @@ qemuBuildBootCommandLine(virCommandPtr cmd, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("reboot timeout is not supported " "by this QEMU binary")); - goto error; + return -1; } virBufferAsprintf(&boot_buf, @@ -6717,7 +6591,7 @@ qemuBuildBootCommandLine(virCommandPtr cmd, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("splash timeout is not supported " "by this QEMU binary")); - goto error; + return -1; } virBufferAsprintf(&boot_buf, "splash-time=%u,", def->os.bm_timeout); @@ -6729,7 +6603,7 @@ qemuBuildBootCommandLine(virCommandPtr cmd, virBufferTrim(&boot_buf, ",", -1); if (virBufferCheckError(&boot_buf) < 0) - goto error; + return -1; boot_opts_str = virBufferContentAndReset(&boot_buf); if (boot_opts_str) { @@ -6755,9 +6629,6 @@ qemuBuildBootCommandLine(virCommandPtr cmd, } return 0; - - error: - return -1; } @@ -6898,13 +6769,12 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver, virBufferPtr buf, virQEMUCapsPtr qemuCaps) { - int ret = -1; size_t i; VIR_AUTOUNREF(virCapsPtr) caps = NULL; virCPUDefPtr cpu = def->cpu; if (!(caps = virQEMUDriverGetCapabilities(driver, false))) - goto cleanup; + return -1; switch ((virCPUMode) cpu->mode) { case VIR_CPU_MODE_HOST_PASSTHROUGH: @@ -6917,7 +6787,7 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver, _("QEMU binary does not support CPU " "host-passthrough for armv7l on " "aarch64 host")); - goto cleanup; + return -1; } virBufferAddLit(buf, ",aarch64=off"); } @@ -6935,7 +6805,7 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver, virReportError(VIR_ERR_INTERNAL_ERROR, _("unexpected host-model CPU for %s architecture"), virArchToString(def->os.arch)); - goto cleanup; + return -1; } break; @@ -6952,7 +6822,7 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver, virReportError(VIR_ERR_INTERNAL_ERROR, _("CPU features not supported by hypervisor for %s " "architecture"), virArchToString(def->os.arch)); - goto cleanup; + return -1; } if (cpu->vendor_id) @@ -6976,9 +6846,7 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver, } } - ret = 0; - cleanup: - return ret; + return 0; } static int @@ -6990,7 +6858,6 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, virArch hostarch = virArchFromHost(); VIR_AUTOFREE(char *) cpu = NULL; VIR_AUTOFREE(char *) cpu_flags = NULL; - int ret = -1; VIR_AUTOCLEAN(virBuffer) cpu_buf = VIR_BUFFER_INITIALIZER; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; size_t i; @@ -6998,7 +6865,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, if (def->cpu && (def->cpu->mode != VIR_CPU_MODE_CUSTOM || def->cpu->model)) { if (qemuBuildCpuModelArgStr(driver, def, &cpu_buf, qemuCaps) < 0) - goto cleanup; + return -1; } else { /* * Need to force a 32-bit guest CPU type if @@ -7164,9 +7031,9 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, } if (virBufferCheckError(&cpu_buf) < 0) - goto cleanup; + return -1; if (virBufferCheckError(&buf) < 0) - goto cleanup; + return -1; cpu = virBufferContentAndReset(&cpu_buf); cpu_flags = virBufferContentAndReset(&buf); @@ -7186,11 +7053,11 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, _("CPU flags requested but can't determine " "default CPU for arch %s"), virArchToString(def->os.arch)); - goto cleanup; + return -1; } if (VIR_STRDUP(cpu, default_model) < 0) - goto cleanup; + return -1; } if (cpu) { @@ -7198,10 +7065,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, virCommandAddArgFormat(cmd, "%s%s", cpu, NULLSTR_EMPTY(cpu_flags)); } - ret = 0; - - cleanup: - return ret; + return 0; } @@ -7304,7 +7168,6 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, virCPUDefPtr cpu = def->cpu; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; size_t i; - int ret = -1; /* This should *never* be NULL, since we always provide * a machine in the capabilities data for QEMU. So this @@ -7360,7 +7223,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("vmport is not available " "with this QEMU binary")); - goto cleanup; + return -1; } virBufferAsprintf(&buf, ",vmport=%s", @@ -7383,7 +7246,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("disable shared memory is not available " "with this QEMU binary")); - goto cleanup; + return -1; } virBufferAddLit(&buf, ",mem-merge=off"); @@ -7391,7 +7254,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, if (def->keywrap && !qemuAppendKeyWrapMachineParms(&buf, qemuCaps, def->keywrap)) - goto cleanup; + return -1; if (def->features[VIR_DOMAIN_FEATURE_GIC] == VIR_TRISTATE_SWITCH_ON) { bool hasGICVersionOption = virQEMUCapsGet(qemuCaps, @@ -7416,7 +7279,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("gic-version option is not available " "with this QEMU binary")); - goto cleanup; + return -1; } virBufferAsprintf(&buf, ",gic-version=%s", @@ -7457,7 +7320,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVDIMM)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("nvdimm isn't supported by this QEMU binary")); - goto cleanup; + return -1; } virBufferAddLit(&buf, ",nvdimm=on"); break; @@ -7469,7 +7332,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("I/O APIC tuning is not supported by this " "QEMU binary")); - goto cleanup; + return -1; } switch ((virDomainIOAPIC) def->features[VIR_DOMAIN_FEATURE_IOAPIC]) { case VIR_DOMAIN_IOAPIC_QEMU: @@ -7477,7 +7340,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("split I/O APIC is not supported by this " "QEMU binary")); - goto cleanup; + return -1; } virBufferAddLit(&buf, ",kernel_irqchip=split"); break; @@ -7499,14 +7362,14 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("HTP resizing is not supported by this " "QEMU binary")); - goto cleanup; + return -1; } str = virDomainHPTResizingTypeToString(def->hpt_resizing); if (!str) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Invalid setting for HPT resizing")); - goto cleanup; + return -1; } virBufferAsprintf(&buf, ",resize-hpt=%s", str); @@ -7517,7 +7380,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Configuring the page size for HPT guests " "is not supported by this QEMU binary")); - goto cleanup; + return -1; } virBufferAsprintf(&buf, ",cap-hpt-max-page-size=%lluk", @@ -7532,14 +7395,14 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("HTM configuration is not supported by this " "QEMU binary")); - goto cleanup; + return -1; } str = virTristateSwitchTypeToString(def->features[VIR_DOMAIN_FEATURE_HTM]); if (!str) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Invalid setting for HTM state")); - goto cleanup; + return -1; } virBufferAsprintf(&buf, ",cap-htm=%s", str); @@ -7552,14 +7415,14 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Nested HV configuration is not supported by " "this QEMU binary")); - goto cleanup; + return -1; } str = virTristateSwitchTypeToString(def->features[VIR_DOMAIN_FEATURE_NESTED_HV]); if (!str) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Invalid setting for nested HV state")); - goto cleanup; + return -1; } virBufferAsprintf(&buf, ",cap-nested-hv=%s", str); @@ -7580,9 +7443,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, virCommandAddArgBuffer(cmd, &buf); - ret = 0; - cleanup: - return ret; + return 0; } @@ -7956,7 +7817,6 @@ qemuBuildGraphicsSDLCommandLine(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED, virDomainGraphicsDefPtr graphics) { - int ret = -1; VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; if (graphics->data.sdl.xauth) @@ -7981,7 +7841,7 @@ qemuBuildGraphicsSDLCommandLine(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("OpenGL for SDL is not supported with this QEMU " "binary")); - goto cleanup; + return -1; } virBufferAsprintf(&opt, ",gl=%s", @@ -7990,13 +7850,11 @@ qemuBuildGraphicsSDLCommandLine(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED, } if (virBufferCheckError(&opt) < 0) - goto cleanup; + return -1; virCommandAddArgBuffer(cmd, &opt); - ret = 0; - cleanup: - return ret; + return 0; } @@ -8013,13 +7871,13 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg, if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("vnc graphics are not supported with this QEMU")); - goto error; + return -1; } if (!(glisten = virDomainGraphicsGetListen(graphics, 0))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing listen element")); - goto error; + return -1; } switch (glisten->type) { @@ -8038,7 +7896,7 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg, graphics->data.vnc.port > 65535)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("vnc port must be in range [5900,65535]")); - goto error; + return -1; } if (glisten->address) { @@ -8080,7 +7938,7 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg, if (gfxPriv->secinfo) { if (qemuBuildObjectSecretCommandLine(cmd, gfxPriv->secinfo) < 0) - goto error; + return -1; secretAlias = gfxPriv->secinfo->s.aes.alias; } @@ -8091,7 +7949,7 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg, secretAlias, gfxPriv->tlsAlias, qemuCaps) < 0) - goto error; + return -1; virBufferAsprintf(&opt, ",tls-creds=%s", gfxPriv->tlsAlias); } else { @@ -8130,9 +7988,6 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg, virCommandAddEnvString(cmd, "QEMU_AUDIO_DRV=none"); return 0; - - error: - return -1; } @@ -8153,13 +8008,13 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("spice graphics are not supported with this QEMU")); - goto error; + return -1; } if (!(glisten = virDomainGraphicsGetListen(graphics, 0))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing listen element")); - goto error; + return -1; } switch (glisten->type) { @@ -8168,7 +8023,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("unix socket for spice graphics are not supported " "with this QEMU")); - goto error; + return -1; } virBufferAddLit(&opt, "unix,addr="); @@ -8189,7 +8044,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("spice TLS port set in XML configuration, " "but TLS is disabled in qemu.conf")); - goto error; + return -1; } virBufferAsprintf(&opt, "tls-port=%u,", tlsPort); hasSecure = true; @@ -8236,7 +8091,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, default: virReportEnumRangeError(virDomainGraphicsSpiceMouseMode, graphics->data.spice.mousemode); - goto error; + return -1; } } @@ -8260,7 +8115,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, _("spice defaultMode secure requested in XML " "configuration, but TLS connection is not " "available")); - goto error; + return -1; } virBufferAddLit(&opt, "tls-channel=default,"); break; @@ -8270,7 +8125,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, _("spice defaultMode insecure requested in XML " "configuration, but plaintext connection is not " "available")); - goto error; + return -1; } virBufferAddLit(&opt, "plaintext-channel=default,"); break; @@ -8288,7 +8143,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, _("spice secure channels set in XML " "configuration, but TLS connection is not " "available")); - goto error; + return -1; } virBufferAsprintf(&opt, "tls-channel=%s,", virDomainGraphicsSpiceChannelNameTypeToString(i)); @@ -8300,7 +8155,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, _("spice insecure channels set in XML " "configuration, but plaintext connection " "is not available")); - goto error; + return -1; } virBufferAsprintf(&opt, "plaintext-channel=%s,", virDomainGraphicsSpiceChannelNameTypeToString(i)); @@ -8333,7 +8188,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_FILE_XFER_DISABLE)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("This QEMU can't disable file transfers through spice")); - goto error; + return -1; } else { virBufferAddLit(&opt, "disable-agent-file-xfer,"); } @@ -8343,7 +8198,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_GL)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("This QEMU doesn't support spice OpenGL")); - goto error; + return -1; } /* spice.gl is a TristateBool, but qemu expects on/off: use @@ -8355,7 +8210,7 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_RENDERNODE)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("This QEMU doesn't support spice OpenGL rendernode")); - goto error; + return -1; } virBufferAddLit(&opt, "rendernode="); @@ -8381,9 +8236,6 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, virCommandAddEnvString(cmd, "QEMU_AUDIO_DRV=spice"); return 0; - - error: - return -1; } @@ -8393,7 +8245,6 @@ qemuBuildGraphicsEGLHeadlessCommandLine(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNU virQEMUCapsPtr qemuCaps, virDomainGraphicsDefPtr graphics) { - int ret = -1; VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; virBufferAddLit(&opt, "egl-headless"); @@ -8403,7 +8254,7 @@ qemuBuildGraphicsEGLHeadlessCommandLine(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNU virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("This QEMU doesn't support OpenGL rendernode " "with egl-headless graphics type")); - goto cleanup; + return -1; } virBufferAddLit(&opt, ",rendernode="); @@ -8412,14 +8263,12 @@ qemuBuildGraphicsEGLHeadlessCommandLine(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNU } if (virBufferCheckError(&opt) < 0) - goto cleanup; + return -1; virCommandAddArg(cmd, "-display"); virCommandAddArgBuffer(cmd, &opt); - ret = 0; - cleanup: - return ret; + return 0; } @@ -8486,7 +8335,6 @@ qemuInterfaceVhostuserConnect(virQEMUDriverPtr driver, char **chardev) { VIR_AUTOUNREF(virQEMUDriverConfigPtr) cfg = virQEMUDriverGetConfig(driver); - int ret = -1; switch ((virDomainChrType)net->data.vhostuser->type) { case VIR_DOMAIN_CHR_TYPE_UNIX: @@ -8494,7 +8342,7 @@ qemuInterfaceVhostuserConnect(virQEMUDriverPtr driver, cmd, cfg, def, net->data.vhostuser, net->info.alias, qemuCaps, 0))) - goto cleanup; + return -1; break; case VIR_DOMAIN_CHR_TYPE_NULL: @@ -8513,12 +8361,10 @@ qemuInterfaceVhostuserConnect(virQEMUDriverPtr driver, virReportError(VIR_ERR_INTERNAL_ERROR, _("vhost-user type '%s' not supported"), virDomainChrTypeToString(net->data.vhostuser->type)); - goto cleanup; + return -1; } - ret = 0; - cleanup: - return ret; + return 0; } static int @@ -9104,15 +8950,12 @@ qemuBuildShmemDevLegacyStr(virDomainDefPtr def, } if (qemuBuildDeviceAddressStr(&buf, def, &shmem->info, qemuCaps) < 0) - goto error; + return NULL; if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } char * @@ -9169,7 +9012,7 @@ qemuBuildShmemBackendMemProps(virDomainShmemDefPtr shmem) return NULL; if (virAsprintf(&mem_alias, "shmmem-%s", shmem->info.alias) < 0) - goto cleanup; + return NULL; qemuMonitorCreateObjectProps(&ret, "memory-backend-file", mem_alias, "s:mem-path", mem_path, @@ -9177,7 +9020,6 @@ qemuBuildShmemBackendMemProps(virDomainShmemDefPtr shmem) "b:share", true, NULL); - cleanup: return ret; } @@ -9625,14 +9467,14 @@ qemuBuildRedirdevDevStr(const virDomainDef *def, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Redirection bus %s is not supported by QEMU"), virDomainRedirdevBusTypeToString(dev->bus)); - goto error; + return NULL; } if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_USB_REDIR)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("USB redirection is not supported " "by this version of QEMU")); - goto error; + return NULL; } virBufferAsprintf(&buf, "usb-redir,chardev=char%s,id=%s", @@ -9643,7 +9485,7 @@ qemuBuildRedirdevDevStr(const virDomainDef *def, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("USB redirection filter is not " "supported by this version of QEMU")); - goto error; + return NULL; } virBufferAddLit(&buf, ",filter="); @@ -9680,15 +9522,12 @@ qemuBuildRedirdevDevStr(const virDomainDef *def, virBufferAsprintf(&buf, ",bootindex=%u", dev->info.bootIndex); if (qemuBuildDeviceAddressStr(&buf, def, &dev->info, qemuCaps) < 0) - goto error; + return NULL; if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -9811,7 +9650,7 @@ qemuBuildTPMDevStr(const virDomainDef *def, case VIR_DOMAIN_TPM_MODEL_LAST: default: virReportEnumRangeError(virDomainTPMModel, tpm->model); - goto error; + return NULL; } if (!virQEMUCapsGet(qemuCaps, flag)) { @@ -9819,19 +9658,16 @@ qemuBuildTPMDevStr(const virDomainDef *def, _("The QEMU executable %s does not support TPM " "model %s"), def->emulator, model); - goto error; + return NULL; } virBufferAsprintf(&buf, "%s,tpmdev=tpm-%s,id=%s", model, tpm->info.alias, tpm->info.alias); if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -9884,17 +9720,17 @@ qemuBuildTPMBackendStr(const virDomainDef *def, case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH: tpmdev = tpm->data.passthrough.source.data.file.path; if (!(cancel_path = virTPMCreateCancelPath(tpmdev))) - goto error; + return NULL; if (qemuBuildTPMOpenBackendFDs(tpmdev, cancel_path, tpmfd, cancelfd) < 0) - goto error; + return NULL; virCommandPassFD(cmd, *tpmfd, VIR_COMMAND_PASS_FD_CLOSE_PARENT); virCommandPassFD(cmd, *cancelfd, VIR_COMMAND_PASS_FD_CLOSE_PARENT); if (!(devset = qemuVirCommandGetDevSet(cmd, *tpmfd)) || !(cancelset = qemuVirCommandGetDevSet(cmd, *cancelfd))) - goto error; + return NULL; virBufferAddLit(&buf, ",path="); virQEMUBuildBufferEscapeComma(&buf, devset); @@ -9908,20 +9744,17 @@ qemuBuildTPMBackendStr(const virDomainDef *def, if (virAsprintf(chardev, "socket,id=chrtpm,path=%s", tpm->data.emulator.source.data.nix.path) < 0) - goto error; + return NULL; break; case VIR_DOMAIN_TPM_TYPE_LAST: - goto error; + return NULL; } if (virBufferCheckError(&buf) < 0) - goto error; + return NULL; return virBufferContentAndReset(&buf); - - error: - return NULL; } @@ -9984,7 +9817,6 @@ qemuBuildSEVCommandLine(virDomainObjPtr vm, virCommandPtr cmd, VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; qemuDomainObjPrivatePtr priv = vm->privateData; char *path = NULL; - int ret = -1; if (!sev) return 0; @@ -9998,23 +9830,21 @@ qemuBuildSEVCommandLine(virDomainObjPtr vm, virCommandPtr cmd, if (sev->dh_cert) { if (virAsprintf(&path, "%s/dh_cert.base64", priv->libDir) < 0) - goto cleanup; + return -1; virBufferAsprintf(&buf, ",dh-cert-file=%s", path); VIR_FREE(path); } if (sev->session) { if (virAsprintf(&path, "%s/session.base64", priv->libDir) < 0) - goto cleanup; + return -1; virBufferAsprintf(&buf, ",session-file=%s", path); VIR_FREE(path); } virCommandAddArg(cmd, "-object"); virCommandAddArgBuffer(cmd, &buf); - ret = 0; - cleanup: - return ret; + return 0; } static int @@ -10167,15 +9997,12 @@ virJSONValuePtr qemuBuildPRManagedManagerInfoProps(qemuDomainObjPrivatePtr priv) { VIR_AUTOFREE(char *) path = NULL; - virJSONValuePtr ret = NULL; if (!(path = qemuDomainGetManagedPRSocketPath(priv))) return NULL; - ret = qemuBuildPRManagerInfoPropsInternal(qemuDomainGetManagedPRAlias(), - path); - - return ret; + return qemuBuildPRManagerInfoPropsInternal(qemuDomainGetManagedPRAlias(), + path); } @@ -10199,7 +10026,6 @@ qemuBuildManagedPRCommandLine(virCommandPtr cmd, { VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; VIR_AUTOPTR(virJSONValue) props = NULL; - int ret = -1; if (!virDomainDefHasManagedPR(def)) return 0; @@ -10208,14 +10034,12 @@ qemuBuildManagedPRCommandLine(virCommandPtr cmd, return -1; if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) - goto cleanup; + return -1; virCommandAddArg(cmd, "-object"); virCommandAddArgBuffer(cmd, &buf); - ret = 0; - cleanup: - return ret; + return 0; } @@ -10345,27 +10169,22 @@ qemuBuildVsockDevStr(virDomainDefPtr def, { qemuDomainVsockPrivatePtr priv = (qemuDomainVsockPrivatePtr)vsock->privateData; VIR_AUTOCLEAN(virBuffer) buf = VIR_BUFFER_INITIALIZER; - char *ret = NULL; - if (qemuBuildVirtioDevStr(&buf, "vhost-vsock", qemuCaps, VIR_DOMAIN_DEVICE_VSOCK, vsock) < 0) { - goto cleanup; + return NULL; } virBufferAsprintf(&buf, ",id=%s", vsock->info.alias); virBufferAsprintf(&buf, ",guest-cid=%u", vsock->guest_cid); virBufferAsprintf(&buf, ",vhostfd=%s%u", fdprefix, priv->vhostfd); if (qemuBuildDeviceAddressStr(&buf, def, &vsock->info, qemuCaps) < 0) - goto cleanup; + return NULL; if (virBufferCheckError(&buf) < 0) - goto cleanup; - - ret = virBufferContentAndReset(&buf); + return NULL; - cleanup: - return ret; + return virBufferContentAndReset(&buf); } @@ -10377,22 +10196,19 @@ qemuBuildVsockCommandLine(virCommandPtr cmd, { qemuDomainVsockPrivatePtr priv = (qemuDomainVsockPrivatePtr)vsock->privateData; VIR_AUTOFREE(char *) devstr = NULL; - int ret = -1; if (!(devstr = qemuBuildVsockDevStr(def, vsock, qemuCaps, ""))) - goto cleanup; + return -1; virCommandPassFD(cmd, priv->vhostfd, VIR_COMMAND_PASS_FD_CLOSE_PARENT); priv->vhostfd = -1; if (qemuCommandAddExtDevice(cmd, &vsock->info) < 0) - goto cleanup; + return -1; virCommandAddArgList(cmd, "-device", devstr, NULL); - ret = 0; - cleanup: - return ret; + return 0; } @@ -10707,7 +10523,7 @@ qemuBuildSerialChrDeviceStr(char **deviceStr, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("'%s' is not supported in this QEMU binary"), virDomainChrSerialTargetModelTypeToString(serial->targetModel)); - goto error; + return -1; } break; @@ -10721,7 +10537,7 @@ qemuBuildSerialChrDeviceStr(char **deviceStr, * branch and we will not have ended up here. */ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid target model for serial device")); - goto error; + return -1; } virBufferAsprintf(&buf, "%s,chardev=char%s,id=%s", @@ -10729,16 +10545,13 @@ qemuBuildSerialChrDeviceStr(char **deviceStr, serial->info.alias, serial->info.alias); if (qemuBuildDeviceAddressStr(&buf, def, &serial->info, qemuCaps) < 0) - goto error; + return -1; if (virBufferCheckError(&buf) < 0) - goto error; + return -1; *deviceStr = virBufferContentAndReset(&buf); return 0; - - error: - return -1; } static int @@ -10771,12 +10584,12 @@ qemuBuildChannelChrDeviceStr(char **deviceStr, if (virAsprintf(deviceStr, "user,guestfwd=tcp:%s:%i-chardev:char%s,id=%s", addr, port, chr->info.alias, chr->info.alias) < 0) - goto cleanup; + return -1; break; case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO: if (!(*deviceStr = qemuBuildVirtioSerialPortDevStr(def, chr))) - goto cleanup; + return -1; break; case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN: @@ -10785,9 +10598,7 @@ qemuBuildChannelChrDeviceStr(char **deviceStr, return ret; } - ret = 0; - cleanup: - return ret; + return 0; } static int @@ -10795,18 +10606,16 @@ qemuBuildConsoleChrDeviceStr(char **deviceStr, const virDomainDef *def, virDomainChrDefPtr chr) { - int ret = -1; - switch ((virDomainChrConsoleTargetType)chr->targetType) { case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLP: case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLPLM: if (!(*deviceStr = qemuBuildSclpDevStr(chr))) - goto cleanup; + return -1; break; case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO: if (!(*deviceStr = qemuBuildVirtioSerialPortDevStr(def, chr))) - goto cleanup; + return -1; break; case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL: @@ -10821,12 +10630,10 @@ qemuBuildConsoleChrDeviceStr(char **deviceStr, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unsupported console target type %s"), NULLSTR(virDomainChrConsoleTargetTypeToString(chr->targetType))); - goto cleanup; + return -1; } - ret = 0; - cleanup: - return ret; + return 0; } int -- 2.19.2

On 8/20/19 2:59 PM, Ján Tomko wrote:
The recent cleanups allow us to clean up the code a bit.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 741 +++++++++++++++------------------------- 1 file changed, 274 insertions(+), 467 deletions(-)
qemuBuildMemoryBackendProps qemuBuildMemoryCellBackendStr qemuBuildHostNetStr (if you take mu suggestion from previous patch and use VIR_AUTOUNREF() for @cfg) Michal

On Wed, Aug 21, 2019 at 09:44:01AM +0200, Michal Privoznik wrote:
On 8/20/19 2:59 PM, Ján Tomko wrote:
The recent cleanups allow us to clean up the code a bit.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 741 +++++++++++++++------------------------- 1 file changed, 274 insertions(+), 467 deletions(-)
qemuBuildMemoryBackendProps qemuBuildMemoryCellBackendStr
The ret usage there does not closely follow the usual mechanical pattern so I sent those separately.
qemuBuildHostNetStr (if you take mu suggestion from previous patch and use VIR_AUTOUNREF() for @cfg)
Actually, doing that shows that cfg has been unused for a few years there. Dealt with separately. Jano
Michal

Prepare this big function for a cleanup. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 0e9bd77f62..82e2a451c2 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10231,8 +10231,8 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, { size_t i; char uuid[VIR_UUID_STRING_BUFLEN]; - virCommandPtr cmd = NULL; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + VIR_AUTOPTR(virCommand) cmd = NULL; + VIR_AUTOUNREF(virQEMUDriverConfigPtr) cfg = virQEMUDriverGetConfig(driver); unsigned int bootHostdevNet = 0; qemuDomainObjPrivatePtr priv = vm->privateData; virDomainDefPtr def = vm->def; @@ -10487,12 +10487,9 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, cfg->logTimestamp) virCommandAddArgList(cmd, "-msg", "timestamp=on", NULL); - virObjectUnref(cfg); - return cmd; + VIR_RETURN_PTR(cmd); error: - virObjectUnref(cfg); - virCommandFree(cmd); return NULL; } -- 2.19.2

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 101 +++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 52 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 82e2a451c2..8cc8f82aab 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10245,7 +10245,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, qemuCaps, migrateURI, snapshot, vmop); if (qemuBuildCommandLineValidate(driver, def) < 0) - goto error; + return NULL; cmd = virCommandNew(def->emulator); @@ -10269,57 +10269,57 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, } if (qemuBuildNameCommandLine(cmd, cfg, def, qemuCaps) < 0) - goto error; + return NULL; if (!standalone) virCommandAddArg(cmd, "-S"); /* freeze CPU */ if (qemuBuildMasterKeyCommandLine(cmd, priv) < 0) - goto error; + return NULL; if (qemuBuildManagedPRCommandLine(cmd, def, priv) < 0) - goto error; + return NULL; if (enableFips) virCommandAddArg(cmd, "-enable-fips"); if (qemuBuildMachineCommandLine(cmd, cfg, def, qemuCaps) < 0) - goto error; + return NULL; qemuBuildTSEGCommandLine(cmd, def); if (qemuBuildCpuCommandLine(cmd, driver, def, qemuCaps) < 0) - goto error; + return NULL; qemuBuildDomainLoaderCommandLine(cmd, def); if (!migrateURI && !snapshot && qemuDomainAlignMemorySizes(def) < 0) - goto error; + return NULL; if (qemuBuildMemCommandLine(cmd, cfg, def, qemuCaps, priv) < 0) - goto error; + return NULL; if (qemuBuildSmpCommandLine(cmd, def) < 0) - goto error; + return NULL; if (qemuBuildIOThreadCommandLine(cmd, def) < 0) - goto error; + return NULL; if (virDomainNumaGetNodeCount(def->numa) && qemuBuildNumaArgStr(cfg, def, cmd, priv) < 0) - goto error; + return NULL; if (qemuBuildMemoryDeviceCommandLine(cmd, cfg, def, priv) < 0) - goto error; + return NULL; virUUIDFormat(def->uuid, uuid); virCommandAddArgList(cmd, "-uuid", uuid, NULL); if (qemuBuildSmbiosCommandLine(cmd, driver, def) < 0) - goto error; + return NULL; if (qemuBuildVMGenIDCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; /* * NB, -nographic *MUST* come before any serial, or monitor @@ -10343,110 +10343,110 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, virCommandAddArg(cmd, "-nodefaults"); if (qemuBuildSgaCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildMonitorCommandLine(logManager, secManager, cmd, cfg, def, priv) < 0) - goto error; + return NULL; if (qemuBuildClockCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildPMCommandLine(cmd, def, priv) < 0) - goto error; + return NULL; if (qemuBuildBootCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildIOMMUCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildGlobalControllerCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildControllersCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildHubCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildControllersByTypeCommandLine(cmd, def, qemuCaps, VIR_DOMAIN_CONTROLLER_TYPE_CCID) < 0) - goto error; + return NULL; if (qemuBuildDisksCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildFilesystemCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildNetCommandLine(driver, logManager, secManager, cmd, def, qemuCaps, vmop, standalone, nnicindexes, nicindexes, &bootHostdevNet) < 0) - goto error; + return NULL; if (qemuBuildSmartcardCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, chardevStdioLogd) < 0) - goto error; + return NULL; if (qemuBuildSerialCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, chardevStdioLogd) < 0) - goto error; + return NULL; if (qemuBuildParallelsCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, chardevStdioLogd) < 0) - goto error; + return NULL; if (qemuBuildChannelsCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, chardevStdioLogd) < 0) - goto error; + return NULL; if (qemuBuildConsoleCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, chardevStdioLogd) < 0) - goto error; + return NULL; if (qemuBuildTPMCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildInputCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildGraphicsCommandLine(cfg, cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildVideoCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildSoundCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildWatchdogCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildRedirdevCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, chardevStdioLogd) < 0) - goto error; + return NULL; if (qemuBuildHostdevCommandLine(cmd, def, qemuCaps, &bootHostdevNet) < 0) - goto error; + return NULL; if (migrateURI) virCommandAddArgList(cmd, "-incoming", migrateURI, NULL); if (qemuBuildMemballoonCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildRNGCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, chardevStdioLogd) < 0) - goto error; + return NULL; if (qemuBuildNVRAMCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildVMCoreInfoCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildSEVCommandLine(vm, cmd, def->sev) < 0) - goto error; + return NULL; if (snapshot) virCommandAddArgList(cmd, "-loadvm", snapshot->def->name, NULL); @@ -10463,21 +10463,21 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, } if (qemuBuildSeccompSandboxCommandLine(cmd, cfg, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildPanicCommandLine(cmd, def, qemuCaps) < 0) - goto error; + return NULL; for (i = 0; i < def->nshmems; i++) { if (qemuBuildShmemCommandLine(logManager, secManager, cmd, cfg, def, def->shmems[i], qemuCaps, chardevStdioLogd)) - goto error; + return NULL; } if (def->vsock && qemuBuildVsockCommandLine(cmd, def, def->vsock, qemuCaps) < 0) - goto error; + return NULL; /* In some situations, eg. VFIO passthrough, QEMU might need to lock a * significant amount of memory, so we need to set the limit accordingly */ @@ -10488,9 +10488,6 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, virCommandAddArgList(cmd, "-msg", "timestamp=on", NULL); VIR_RETURN_PTR(cmd); - - error: - return NULL; } -- 2.19.2

On 8/20/19 2:58 PM, Ján Tomko wrote:
Ján Tomko (19): qemuBuildSerialChrDeviceStr: rename cmd to buf qemuBuildNumaArgStr: split variable declarations qemuBuildHotpluggableCPUProps: use VIR_RETURN_PTR qemuxml2xmltest: switch TPM tests to use latest caps qemu: move TPM vaildation to qemuDomainDeviceDefValidateTPM qemuBuildTPMBackendStr: format device and alias separately qemu_command: switch to VIR_AUTOCLEAN for virBuffer qemu_command: use VIR_AUTOPTR for virJSONValue qemu_command: use VIR_AUTOFREE for variables used once qemuBuildNetworkDriveURI: use VIR_AUTOPTR for virURI qemuBuildControllersByTypeCommandLine: use VIR_AUTOFREE qemuBuildRNGCommandLine: use VIR_AUTOFREE qemuBuildSmpCommandLine: use virCommandAddArgBuffer directly qemuBuildShmemCommandLine: add chardev variable qemuBuildShmemCommandLine: use VIR_AUTOFREE for devstr qemu_command: use VIR_AUTOUNREF qemu_command: remove unnecessary labels and ret variables qemuBuildCommandLine: use VIR_AUTO* qemuBuildCommandLine: remove unnecessary error label
src/qemu/qemu_command.c | 1388 ++++++----------- src/qemu/qemu_domain.c | 29 +- ...> tpm-emulator-tpm2-enc.x86_64-latest.xml} | 4 +- ...ml => tpm-emulator-tpm2.x86_64-latest.xml} | 4 +- ...tor.xml => tpm-emulator.x86_64-latest.xml} | 4 +- ... => tpm-passthrough-crb.x86_64-latest.xml} | 4 +- ....xml => tpm-passthrough.x86_64-latest.xml} | 4 +- tests/qemuxml2xmltest.c | 10 +- 8 files changed, 545 insertions(+), 902 deletions(-) rename tests/qemuxml2xmloutdata/{tpm-emulator-tpm2-enc.xml => tpm-emulator-tpm2-enc.x86_64-latest.xml} (89%) rename tests/qemuxml2xmloutdata/{tpm-emulator-tpm2.xml => tpm-emulator-tpm2.x86_64-latest.xml} (89%) rename tests/qemuxml2xmloutdata/{tpm-emulator.xml => tpm-emulator.x86_64-latest.xml} (89%) rename tests/qemuxml2xmloutdata/{tpm-passthrough-crb.xml => tpm-passthrough-crb.x86_64-latest.xml} (89%) rename tests/qemuxml2xmloutdata/{tpm-passthrough.xml => tpm-passthrough.x86_64-latest.xml} (89%)
Reviewed-by: Michal Privoznik <mprivozn@redhat.com> I've put some comments for individual patches though. In some I'm pointing out some missing changes that you do in later patches. So maybe, if you'd reorder them then they're golden? Or don't. Michal
participants (2)
-
Ján Tomko
-
Michal Privoznik