[PATCH 006/103] qemuBuildObjectCommandlineFromJSON: Format directly into the virCommand

Peter Krempa pkrempa at redhat.com
Thu Oct 7 15:16:54 UTC 2021


All callers basically end up dumping the buffer into a string and then
adding '-object' 'props' arguments to virCommand. Simplify all callers
by doing this in the function itself.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_command.c | 119 +++++++++++-----------------------------
 1 file changed, 32 insertions(+), 87 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index a4d439a0ec..ae8234f88f 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -156,10 +156,11 @@ VIR_ENUM_IMPL(qemuAudioDriver,


 static int
-qemuBuildObjectCommandlineFromJSON(virBuffer *buf,
+qemuBuildObjectCommandlineFromJSON(virCommand *cmd,
                                    virJSONValue *props,
                                    virQEMUCaps *qemuCaps)
 {
+    g_autofree char *arg = NULL;
     const char *type = virJSONValueObjectGetString(props, "qom-type");
     const char *alias = virJSONValueObjectGetString(props, "id");

@@ -171,13 +172,22 @@ qemuBuildObjectCommandlineFromJSON(virBuffer *buf,
     }

     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_QAPIFIED)) {
-        return virJSONValueToBuffer(props, buf, false);
+        if (!(arg = virJSONValueToString(props, false)))
+            return -1;
     } else {
-        virBufferAsprintf(buf, "%s,", type);
+        g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;

-        return virQEMUBuildCommandLineJSON(props, buf, "qom-type",
-                                           virQEMUBuildCommandLineJSONArrayBitmap);
+        virBufferAsprintf(&buf, "%s,", type);
+
+        if (virQEMUBuildCommandLineJSON(props, &buf, "qom-type",
+                                        virQEMUBuildCommandLineJSONArrayBitmap) < 0)
+            return -1;
+
+        arg = virBufferContentAndReset(&buf);
     }
+
+    virCommandAddArgList(cmd, "-object", arg, NULL);
+    return 0;
 }


@@ -197,7 +207,6 @@ qemuBuildMasterKeyCommandLine(virCommand *cmd,
 {
     g_autofree char *alias = NULL;
     g_autofree char *path = NULL;
-    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
     g_autoptr(virJSONValue) props = NULL;

     if (!(alias = qemuDomainGetMasterKeyAlias()))
@@ -217,12 +226,9 @@ qemuBuildMasterKeyCommandLine(virCommand *cmd,
                                      NULL) < 0)
         return -1;

-    if (qemuBuildObjectCommandlineFromJSON(&buf, props, priv->qemuCaps) < 0)
+    if (qemuBuildObjectCommandlineFromJSON(cmd, props, priv->qemuCaps) < 0)
         return -1;

-    virCommandAddArg(cmd, "-object");
-    virCommandAddArgBuffer(cmd, &buf);
-
     return 0;
 }

@@ -732,18 +738,14 @@ qemuBuildObjectSecretCommandLine(virCommand *cmd,
                                  qemuDomainSecretInfo *secinfo,
                                  virQEMUCaps *qemuCaps)
 {
-    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
     g_autoptr(virJSONValue) props = NULL;

     if (qemuBuildSecretInfoProps(secinfo, &props) < 0)
         return -1;

-    if (qemuBuildObjectCommandlineFromJSON(&buf, props, qemuCaps) < 0)
+    if (qemuBuildObjectCommandlineFromJSON(cmd, props, qemuCaps) < 0)
         return -1;

-    virCommandAddArg(cmd, "-object");
-    virCommandAddArgBuffer(cmd, &buf);
-
     return 0;
 }

@@ -803,19 +805,15 @@ qemuBuildTLSx509CommandLine(virCommand *cmd,
                             const char *alias,
                             virQEMUCaps *qemuCaps)
 {
-    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
     g_autoptr(virJSONValue) props = NULL;

     if (qemuBuildTLSx509BackendProps(tlspath, isListen, verifypeer, alias,
                                      certEncSecretAlias, &props) < 0)
         return -1;

-    if (qemuBuildObjectCommandlineFromJSON(&buf, props, qemuCaps) < 0)
+    if (qemuBuildObjectCommandlineFromJSON(cmd, props, qemuCaps) < 0)
         return -1;

-    virCommandAddArg(cmd, "-object");
-    virCommandAddArgBuffer(cmd, &buf);
-
     return 0;
 }

@@ -1852,17 +1850,12 @@ qemuBuildObjectCommandline(virCommand *cmd,
                            virJSONValue *objProps,
                            virQEMUCaps *qemuCaps)
 {
-    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
-
     if (!objProps)
         return 0;

-    if (qemuBuildObjectCommandlineFromJSON(&buf, objProps, qemuCaps) < 0)
+    if (qemuBuildObjectCommandlineFromJSON(cmd, objProps, qemuCaps) < 0)
         return -1;

-    virCommandAddArg(cmd, "-object");
-    virCommandAddArgBuffer(cmd, &buf);
-
     return 0;
 }

@@ -3210,7 +3203,7 @@ qemuBuildMemoryCellBackendProps(virDomainDef *def,


 static int
-qemuBuildMemoryDimmBackendStr(virBuffer *buf,
+qemuBuildMemoryDimmBackendStr(virCommand *cmd,
                               virDomainMemoryDef *mem,
                               virDomainDef *def,
                               virQEMUDriverConfig *cfg,
@@ -3231,7 +3224,7 @@ qemuBuildMemoryDimmBackendStr(virBuffer *buf,
                                     priv, def, mem, true, false) < 0)
         return -1;

-    if (qemuBuildObjectCommandlineFromJSON(buf, props, priv->qemuCaps) < 0)
+    if (qemuBuildObjectCommandlineFromJSON(cmd, props, priv->qemuCaps) < 0)
         return -1;

     return 0;
@@ -3946,16 +3939,12 @@ qemuBuildInputCommandLine(virCommand *cmd,

         if (input->type == VIR_DOMAIN_INPUT_TYPE_EVDEV) {
             g_autoptr(virJSONValue) props = NULL;
-            g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;

             if (!(props = qemuBuildInputEvdevProps(input)))
                 return -1;

-            if (qemuBuildObjectCommandlineFromJSON(&buf, props, qemuCaps) < 0)
+            if (qemuBuildObjectCommandlineFromJSON(cmd, props, qemuCaps) < 0)
                 return -1;
-
-            virCommandAddArg(cmd, "-object");
-            virCommandAddArgBuffer(cmd, &buf);
         } else {
             g_autofree char *devstr = NULL;

@@ -5523,11 +5512,9 @@ qemuBuildRNGCommandLine(virLogManager *logManager,

     for (i = 0; i < def->nrngs; i++) {
         g_autoptr(virJSONValue) props = NULL;
-        g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
         virDomainRNGDef *rng = def->rngs[i];
         g_autofree char *chardev = NULL;
         g_autofree char *devstr = NULL;
-        int rc;

         if (!rng->info.alias) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -5547,14 +5534,9 @@ qemuBuildRNGCommandLine(virLogManager *logManager,
         if (qemuBuildRNGBackendProps(rng, &props) < 0)
             return -1;

-        rc = qemuBuildObjectCommandlineFromJSON(&buf, props, qemuCaps);
-
-        if (rc < 0)
+        if (qemuBuildObjectCommandlineFromJSON(cmd, props, qemuCaps) < 0)
             return -1;

-        virCommandAddArg(cmd, "-object");
-        virCommandAddArgBuffer(cmd, &buf);
-
         /* add the device */
         if (qemuCommandAddExtDevice(cmd, &rng->info) < 0)
             return -1;
@@ -7109,7 +7091,6 @@ qemuBuildMemCommandLineMemoryDefaultBackend(virCommand *cmd,
 {
     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(priv->driver);
     g_autoptr(virJSONValue) props = NULL;
-    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
     virDomainMemoryDef mem = { 0 };

     mem.size = virDomainDefGetMemoryInitial(def);
@@ -7120,11 +7101,9 @@ qemuBuildMemCommandLineMemoryDefaultBackend(virCommand *cmd,
                                     priv, def, &mem, false, true) < 0)
         return -1;

-    if (qemuBuildObjectCommandlineFromJSON(&buf, props, priv->qemuCaps) < 0)
+    if (qemuBuildObjectCommandlineFromJSON(cmd, props, priv->qemuCaps) < 0)
         return -1;

-    virCommandAddArg(cmd, "-object");
-    virCommandAddArgBuffer(cmd, &buf);
     return 0;
 }

@@ -7203,17 +7182,13 @@ qemuBuildIOThreadCommandLine(virCommand *cmd,

     for (i = 0; i < def->niothreadids; i++) {
         g_autoptr(virJSONValue) props = NULL;
-        g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
         g_autofree char *alias = g_strdup_printf("iothread%u", def->iothreadids[i]->iothread_id);

         if (qemuMonitorCreateObjectProps(&props, "iothread", alias, NULL) < 0)
             return -1;

-        if (qemuBuildObjectCommandlineFromJSON(&buf, props, qemuCaps) < 0)
+        if (qemuBuildObjectCommandlineFromJSON(cmd, props, qemuCaps) < 0)
             return -1;
-
-        virCommandAddArg(cmd, "-object");
-        virCommandAddArgBuffer(cmd, &buf);
     }

     return 0;
@@ -7442,14 +7417,9 @@ qemuBuildNumaCommandLine(virQEMUDriverConfig *cfg,
         ssize_t initiator = virDomainNumaGetNodeInitiator(def->numa, i);

         if (needBackend) {
-            g_auto(virBuffer) objbuf = VIR_BUFFER_INITIALIZER;
-
-            if (qemuBuildObjectCommandlineFromJSON(&objbuf, nodeBackends[i],
+            if (qemuBuildObjectCommandlineFromJSON(cmd, nodeBackends[i],
                                                    priv->qemuCaps) < 0)
                 goto cleanup;
-
-            virCommandAddArg(cmd, "-object");
-            virCommandAddArgBuffer(cmd, &objbuf);
         }

         virCommandAddArg(cmd, "-numa");
@@ -7527,15 +7497,11 @@ qemuBuildMemoryDeviceCommandLine(virCommand *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++) {
-        g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
         char *dimmStr;

-        if (qemuBuildMemoryDimmBackendStr(&buf, def->mems[i], def, cfg, priv) < 0)
+        if (qemuBuildMemoryDimmBackendStr(cmd, def->mems[i], def, cfg, priv) < 0)
             return -1;

-        virCommandAddArg(cmd, "-object");
-        virCommandAddArgBuffer(cmd, &buf);
-
         if (!(dimmStr = qemuBuildMemoryDeviceStr(def, def->mems[i], priv->qemuCaps)))
             return -1;

@@ -9044,10 +9010,8 @@ qemuBuildShmemCommandLine(virLogManager *logManager,
                           bool chardevStdioLogd)
 {
     g_autoptr(virJSONValue) memProps = NULL;
-    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
     g_autofree char *devstr = NULL;
     g_autofree char *chardev = NULL;
-    int rc;
     unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
         QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
     if (chardevStdioLogd)
@@ -9088,14 +9052,9 @@ qemuBuildShmemCommandLine(virLogManager *logManager,
         if (!(memProps = qemuBuildShmemBackendMemProps(shmem)))
             return -1;

-        rc = qemuBuildObjectCommandlineFromJSON(&buf, memProps, qemuCaps);
-
-        if (rc < 0)
+        if (qemuBuildObjectCommandlineFromJSON(cmd, memProps, qemuCaps) < 0)
             return -1;

-        virCommandAddArg(cmd, "-object");
-        virCommandAddArgBuffer(cmd, &buf);
-
         G_GNUC_FALLTHROUGH;
     case VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL:
         devstr = qemuBuildShmemDevStr(def, shmem, qemuCaps);
@@ -9816,7 +9775,6 @@ qemuBuildSEVCommandLine(virDomainObj *vm, virCommand *cmd,
                         virDomainSEVDef *sev)
 {
     g_autoptr(virJSONValue) props = NULL;
-    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
     qemuDomainObjPrivate *priv = vm->privateData;
     g_autofree char *dhpath = NULL;
     g_autofree char *sessionpath = NULL;
@@ -9839,11 +9797,9 @@ qemuBuildSEVCommandLine(virDomainObj *vm, virCommand *cmd,
                                      NULL) < 0)
         return -1;

-    if (qemuBuildObjectCommandlineFromJSON(&buf, props, priv->qemuCaps) < 0)
+    if (qemuBuildObjectCommandlineFromJSON(cmd, props, priv->qemuCaps) < 0)
         return -1;

-    virCommandAddArg(cmd, "-object");
-    virCommandAddArgBuffer(cmd, &buf);
     return 0;
 }

@@ -9852,18 +9808,15 @@ static int
 qemuBuildPVCommandLine(virDomainObj *vm, virCommand *cmd)
 {
     g_autoptr(virJSONValue) props = NULL;
-    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
     qemuDomainObjPrivate *priv = vm->privateData;

     if (qemuMonitorCreateObjectProps(&props, "s390-pv-guest", "lsec0",
                                      NULL) < 0)
         return -1;

-    if (qemuBuildObjectCommandlineFromJSON(&buf, props, priv->qemuCaps) < 0)
+    if (qemuBuildObjectCommandlineFromJSON(cmd, props, priv->qemuCaps) < 0)
         return -1;

-    virCommandAddArg(cmd, "-object");
-    virCommandAddArgBuffer(cmd, &buf);
     return 0;
 }

@@ -9993,7 +9946,6 @@ qemuBuildManagedPRCommandLine(virCommand *cmd,
                               const virDomainDef *def,
                               qemuDomainObjPrivate *priv)
 {
-    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
     g_autoptr(virJSONValue) props = NULL;

     if (!virDomainDefHasManagedPR(def))
@@ -10002,12 +9954,9 @@ qemuBuildManagedPRCommandLine(virCommand *cmd,
     if (!(props = qemuBuildPRManagedManagerInfoProps(priv)))
         return -1;

-    if (qemuBuildObjectCommandlineFromJSON(&buf, props, priv->qemuCaps) < 0)
+    if (qemuBuildObjectCommandlineFromJSON(cmd, props, priv->qemuCaps) < 0)
         return -1;

-    virCommandAddArg(cmd, "-object");
-    virCommandAddArgBuffer(cmd, &buf);
-
     return 0;
 }

@@ -10076,7 +10025,6 @@ qemuBuildDBusVMStateCommandLine(virCommand *cmd,
                                 virQEMUDriver *driver,
                                 virDomainObj *vm)
 {
-    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
     g_autoptr(virJSONValue) props = NULL;
     qemuDomainObjPrivate *priv = QEMU_DOMAIN_PRIVATE(vm);

@@ -10091,12 +10039,9 @@ qemuBuildDBusVMStateCommandLine(virCommand *cmd,
     if (!(props = qemuBuildDBusVMStateInfoProps(driver, vm)))
         return -1;

-    if (qemuBuildObjectCommandlineFromJSON(&buf, props, priv->qemuCaps) < 0)
+    if (qemuBuildObjectCommandlineFromJSON(cmd, props, priv->qemuCaps) < 0)
         return -1;

-    virCommandAddArg(cmd, "-object");
-    virCommandAddArgBuffer(cmd, &buf);
-
     priv->dbusVMState = true;

     return 0;
-- 
2.31.1




More information about the libvir-list mailing list