'qemuBuildChrChardevStr' used a hybrid approach where some arguments
were directly added to '@cmd' while the commandline itself was returned
as a string.
This patch renames qemuBuildChrChardevStr to qemuBuildChardevCommand
and adds the argument directly to @cmd inside the function.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_command.c | 186 +++++++++++++++-------------------------
1 file changed, 71 insertions(+), 115 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index fb4535e889..f6aab6a52c 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5036,14 +5036,12 @@ qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev)
}
-/* This function outputs a -chardev command line option which describes only the
- * host side of the character device */
-static char *
-qemuBuildChrChardevStr(virCommand *cmd,
- virQEMUDriverConfig *cfg,
- const virDomainChrSourceDef *dev,
- const char *alias,
- virQEMUCaps *qemuCaps)
+static int
+qemuBuildChardevCommand(virCommand *cmd,
+ virQEMUDriverConfig *cfg,
+ const virDomainChrSourceDef *dev,
+ const char *alias,
+ virQEMUCaps *qemuCaps)
{
qemuDomainChrSourcePrivate *chrSourcePriv = QEMU_DOMAIN_CHR_SOURCE_PRIVATE(dev);
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
@@ -5051,7 +5049,7 @@ qemuBuildChrChardevStr(virCommand *cmd,
g_autofree char *charAlias = NULL;
if (!(charAlias = qemuAliasChardevFromDevAlias(alias)))
- return NULL;
+ return -1;
switch ((virDomainChrType) dev->type) {
case VIR_DOMAIN_CHR_TYPE_NULL:
@@ -5158,20 +5156,20 @@ qemuBuildChrChardevStr(virCommand *cmd,
if (qemuBuildObjectSecretCommandLine(cmd,
chrSourcePriv->secinfo,
qemuCaps) < 0)
- return NULL;
+ return -1;
tlsCertEncSecAlias = chrSourcePriv->secinfo->alias;
}
if (!(objalias = qemuAliasTLSObjFromSrcAlias(charAlias)))
- return NULL;
+ return -1;
if (qemuBuildTLSx509CommandLine(cmd, cfg->chardevTLSx509certdir,
dev->data.tcp.listen,
cfg->chardevTLSx509verify,
tlsCertEncSecAlias,
objalias, qemuCaps) < 0) {
- return NULL;
+ return -1;
}
virBufferAsprintf(&buf, ",tls-creds=%s", objalias);
@@ -5214,7 +5212,7 @@ qemuBuildChrChardevStr(virCommand *cmd,
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unsupported chardev '%s'"),
virDomainChrTypeToString(dev->type));
- return NULL;
+ return -1;
}
if (dev->logfile) {
@@ -5241,7 +5239,9 @@ qemuBuildChrChardevStr(virCommand *cmd,
}
}
- return virBufferContentAndReset(&buf);
+ virCommandAddArgList(cmd, "-chardev", virBufferCurrentContent(&buf),
NULL);
+
+ return 0;
}
@@ -5513,19 +5513,15 @@ qemuBuildMonitorCommandLine(virCommand *cmd,
virQEMUDriverConfig *cfg,
qemuDomainObjPrivate *priv)
{
- g_autofree char *chrdev = NULL;
-
if (!priv->monConfig)
return 0;
- if (!(chrdev = qemuBuildChrChardevStr(cmd,
- cfg,
- priv->monConfig,
- "monitor",
- priv->qemuCaps)))
+ if (qemuBuildChardevCommand(cmd,
+ cfg,
+ priv->monConfig,
+ "monitor",
+ priv->qemuCaps) < 0)
return -1;
- virCommandAddArg(cmd, "-chardev");
- virCommandAddArg(cmd, chrdev);
virCommandAddArg(cmd, "-mon");
virCommandAddArg(cmd, "chardev=charmonitor,id=monitor,mode=control");
@@ -5641,14 +5637,11 @@ qemuBuildSclpDevProps(virDomainChrDef *dev)
static int
-qemuBuildRNGBackendChrdevStr(virCommand *cmd,
- virQEMUDriverConfig *cfg,
- virDomainRNGDef *rng,
- virQEMUCaps *qemuCaps,
- char **chr)
+qemuBuildRNGBackendChrdev(virCommand *cmd,
+ virQEMUDriverConfig *cfg,
+ virDomainRNGDef *rng,
+ virQEMUCaps *qemuCaps)
{
- *chr = NULL;
-
switch ((virDomainRNGBackend) rng->backend) {
case VIR_DOMAIN_RNG_BACKEND_RANDOM:
case VIR_DOMAIN_RNG_BACKEND_BUILTIN:
@@ -5657,11 +5650,11 @@ qemuBuildRNGBackendChrdevStr(virCommand *cmd,
return 0;
case VIR_DOMAIN_RNG_BACKEND_EGD:
- if (!(*chr = qemuBuildChrChardevStr(cmd,
- cfg,
- rng->source.chardev,
- rng->info.alias,
- qemuCaps)))
+ if (qemuBuildChardevCommand(cmd,
+ cfg,
+ rng->source.chardev,
+ rng->info.alias,
+ qemuCaps) < 0)
return -1;
break;
}
@@ -5759,7 +5752,6 @@ qemuBuildRNGCommandLine(virCommand *cmd,
for (i = 0; i < def->nrngs; i++) {
g_autoptr(virJSONValue) props = NULL;
virDomainRNGDef *rng = def->rngs[i];
- g_autofree char *chardev = NULL;
g_autoptr(virJSONValue) devprops = NULL;
if (!rng->info.alias) {
@@ -5769,12 +5761,9 @@ qemuBuildRNGCommandLine(virCommand *cmd,
}
/* possibly add character device for backend */
- if (qemuBuildRNGBackendChrdevStr(cmd, cfg, rng, qemuCaps, &chardev) < 0)
+ if (qemuBuildRNGBackendChrdev(cmd, cfg, rng, qemuCaps) < 0)
return -1;
- if (chardev)
- virCommandAddArgList(cmd, "-chardev", chardev, NULL);
-
if (qemuBuildRNGBackendProps(rng, &props) < 0)
return -1;
@@ -8597,18 +8586,17 @@ static int
qemuInterfaceVhostuserConnect(virQEMUDriver *driver,
virCommand *cmd,
virDomainNetDef *net,
- virQEMUCaps *qemuCaps,
- char **chardev)
+ virQEMUCaps *qemuCaps)
{
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
switch ((virDomainChrType)net->data.vhostuser->type) {
case VIR_DOMAIN_CHR_TYPE_UNIX:
- if (!(*chardev = qemuBuildChrChardevStr(cmd,
- cfg,
- net->data.vhostuser,
- net->info.alias,
- qemuCaps)))
+ if (qemuBuildChardevCommand(cmd,
+ cfg,
+ net->data.vhostuser,
+ net->info.alias,
+ qemuCaps) < 0)
return -1;
break;
@@ -8649,7 +8637,6 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver,
int ret = -1;
g_autoptr(virJSONValue) nicprops = NULL;
g_autofree char *nic = NULL;
- g_autofree char *chardev = NULL;
int *tapfd = NULL;
size_t tapfdSize = 0;
int *vhostfd = NULL;
@@ -8727,7 +8714,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver,
case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
requireNicdev = true;
- if (qemuInterfaceVhostuserConnect(driver, cmd, net, qemuCaps, &chardev) <
0)
+ if (qemuInterfaceVhostuserConnect(driver, cmd, net, qemuCaps) < 0)
goto cleanup;
if
(virNetDevOpenvswitchGetVhostuserIfname(net->data.vhostuser->data.nix.path,
@@ -8888,9 +8875,6 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver,
vdpafd = -1;
}
- if (chardev)
- virCommandAddArgList(cmd, "-chardev", chardev, NULL);
-
if (!(hostnetprops = qemuBuildHostNetProps(net,
tapfdName, tapfdSize,
vhostfdName, vhostfdSize,
@@ -9045,18 +9029,14 @@ qemuBuildSmartcardCommandLine(virCommand *cmd,
break;
case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH: {
- g_autofree char *chardevstr = NULL;
g_autofree char *chardevalias = g_strdup_printf("char%s",
smartcard->info.alias);
- if (!(chardevstr = qemuBuildChrChardevStr(cmd,
- cfg,
- smartcard->data.passthru,
- smartcard->info.alias,
- qemuCaps))) {
+ if (qemuBuildChardevCommand(cmd,
+ cfg,
+ smartcard->data.passthru,
+ smartcard->info.alias,
+ qemuCaps) < 0)
return -1;
- }
-
- virCommandAddArgList(cmd, "-chardev", chardevstr, NULL);
if (virJSONValueObjectAdd(&props,
"s:driver", "ccid-card-passthru",
@@ -9205,7 +9185,6 @@ qemuBuildShmemCommandLine(virCommand *cmd,
{
g_autoptr(virJSONValue) memProps = NULL;
g_autoptr(virJSONValue) devProps = NULL;
- g_autofree char *chardev = NULL;
if (shmem->size) {
/*
@@ -9264,15 +9243,12 @@ qemuBuildShmemCommandLine(virCommand *cmd,
return -1;
if (shmem->server.enabled) {
- chardev = qemuBuildChrChardevStr(cmd,
- cfg,
- shmem->server.chr,
- shmem->info.alias,
- qemuCaps);
- if (!chardev)
+ if (qemuBuildChardevCommand(cmd,
+ cfg,
+ shmem->server.chr,
+ shmem->info.alias,
+ qemuCaps) < 0)
return -1;
-
- virCommandAddArgList(cmd, "-chardev", chardev, NULL);
}
return 0;
@@ -9381,19 +9357,16 @@ qemuBuildSerialCommandLine(virCommand *cmd,
for (i = 0; i < def->nserials; i++) {
virDomainChrDef *serial = def->serials[i];
- g_autofree char *devstr = NULL;
if (serial->source->type == VIR_DOMAIN_CHR_TYPE_SPICEPORT &&
!havespice)
continue;
- if (!(devstr = qemuBuildChrChardevStr(cmd,
- cfg,
- serial->source,
- serial->info.alias,
- qemuCaps)))
+ if (qemuBuildChardevCommand(cmd,
+ cfg,
+ serial->source,
+ serial->info.alias,
+ qemuCaps) < 0)
return -1;
- virCommandAddArg(cmd, "-chardev");
- virCommandAddArg(cmd, devstr);
/* If the device is not a platform device, build the devstr */
if (!qemuChrIsPlatformDevice(def, serial)) {
@@ -9430,16 +9403,13 @@ qemuBuildParallelsCommandLine(virCommand *cmd,
for (i = 0; i < def->nparallels; i++) {
virDomainChrDef *parallel = def->parallels[i];
- g_autofree char *devstr = NULL;
- if (!(devstr = qemuBuildChrChardevStr(cmd,
- cfg,
- parallel->source,
- parallel->info.alias,
- qemuCaps)))
+ if (qemuBuildChardevCommand(cmd,
+ cfg,
+ parallel->source,
+ parallel->info.alias,
+ qemuCaps) < 0)
return -1;
- virCommandAddArg(cmd, "-chardev");
- virCommandAddArg(cmd, devstr);
if (qemuBuildChrDeviceCommandLine(cmd, def, parallel,
qemuCaps) < 0)
@@ -9460,19 +9430,15 @@ qemuBuildChannelsCommandLine(virCommand *cmd,
for (i = 0; i < def->nchannels; i++) {
virDomainChrDef *channel = def->channels[i];
- g_autofree char *chardevstr = NULL;
g_autoptr(virJSONValue) netdevprops = NULL;
- if (!(chardevstr = qemuBuildChrChardevStr(cmd,
- cfg,
- channel->source,
- channel->info.alias,
- qemuCaps)))
+ if (qemuBuildChardevCommand(cmd,
+ cfg,
+ channel->source,
+ channel->info.alias,
+ qemuCaps) < 0)
return -1;
- virCommandAddArg(cmd, "-chardev");
- virCommandAddArg(cmd, chardevstr);
-
switch ((virDomainChrChannelTargetType) channel->targetType) {
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD:
if (!(netdevprops = qemuBuildChannelGuestfwdNetdevProps(channel)))
@@ -9509,21 +9475,17 @@ qemuBuildConsoleCommandLine(virCommand *cmd,
/* Explicit console devices */
for (i = 0; i < def->nconsoles; i++) {
virDomainChrDef *console = def->consoles[i];
- char *devstr;
switch (console->targetType) {
case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLP:
case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLPLM:
case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO:
- if (!(devstr = qemuBuildChrChardevStr(cmd,
- cfg,
- console->source,
- console->info.alias,
- qemuCaps)))
+ if (qemuBuildChardevCommand(cmd,
+ cfg,
+ console->source,
+ console->info.alias,
+ qemuCaps) < 0)
return -1;
- virCommandAddArg(cmd, "-chardev");
- virCommandAddArg(cmd, devstr);
- VIR_FREE(devstr);
if (qemuBuildChrDeviceCommandLine(cmd, def, console, qemuCaps) < 0)
return -1;
@@ -9610,19 +9572,13 @@ qemuBuildRedirdevCommandLine(virCommand *cmd,
for (i = 0; i < def->nredirdevs; i++) {
virDomainRedirdevDef *redirdev = def->redirdevs[i];
g_autoptr(virJSONValue) devprops = NULL;
- char *devstr;
- if (!(devstr = qemuBuildChrChardevStr(cmd,
- cfg,
- redirdev->source,
- redirdev->info.alias,
- qemuCaps))) {
+ if (qemuBuildChardevCommand(cmd,
+ cfg,
+ redirdev->source,
+ redirdev->info.alias,
+ qemuCaps) < 0)
return -1;
- }
-
- virCommandAddArg(cmd, "-chardev");
- virCommandAddArg(cmd, devstr);
- VIR_FREE(devstr);
if (!(devprops = qemuBuildRedirdevDevProps(def, redirdev)))
return -1;
--
2.31.1