]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: domain: Store passthrough arguments in NULL-terminated string list
authorPeter Krempa <pkrempa@redhat.com>
Mon, 21 Jun 2021 12:54:24 +0000 (14:54 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 9 Aug 2021 08:09:00 +0000 (10:09 +0200)
We always process the full list so there's no value in storing the count
separately.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_command.c
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h

index 4bcb5a3146d813f84c68ef82151796bbc3ae2039..ecfed19432c78505d77d33fa7c57c1f8553a1da6 100644 (file)
@@ -10633,10 +10633,11 @@ qemuBuildCommandLine(virQEMUDriver *driver,
 
     if (def->namespaceData) {
         qemuDomainXmlNsDef *qemuxmlns;
+        GStrv n;
 
         qemuxmlns = def->namespaceData;
-        for (i = 0; i < qemuxmlns->num_args; i++)
-            virCommandAddArg(cmd, qemuxmlns->args[i]);
+        for (n = qemuxmlns->args; n && *n; n++)
+            virCommandAddArg(cmd, *n);
         for (i = 0; i < qemuxmlns->num_env; i++)
             virCommandAddEnvPair(cmd, qemuxmlns->env[i].name,
                                  NULLSTR_EMPTY(qemuxmlns->env[i].value));
index 3be5117c1d9b06b82fd95a04535f4e9f62474864..bc448e48a479b100c7a7cc23722b6504a0a8bd16 100644 (file)
@@ -3330,7 +3330,7 @@ qemuDomainXmlNsDefFree(qemuDomainXmlNsDef *def)
     }
     g_free(def->env);
 
-    virStringListFreeCount(def->args, def->num_args);
+    g_strfreev(def->args);
     g_strfreev(def->capsadd);
     g_strfreev(def->capsdel);
 
@@ -3363,10 +3363,10 @@ qemuDomainDefNamespaceParseCommandlineArgs(qemuDomainXmlNsDef *nsdef,
     if (nnodes == 0)
         return 0;
 
-    nsdef->args = g_new0(char *, nnodes);
+    nsdef->args = g_new0(char *, nnodes + 1);
 
     for (i = 0; i < nnodes; i++) {
-        if (!(nsdef->args[nsdef->num_args++] = virXMLPropString(nodes[i], "value"))) {
+        if (!(nsdef->args[i] = virXMLPropString(nodes[i], "value"))) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                            _("No qemu command-line argument specified"));
             return -1;
@@ -3491,7 +3491,7 @@ qemuDomainDefNamespaceParse(xmlXPathContextPtr ctxt,
 
     nsdata->deprecationBehavior = virXPathString("string(./qemu:deprecation/@behavior)", ctxt);
 
-    if (nsdata->num_args > 0 || nsdata->num_env > 0 ||
+    if (nsdata->args || nsdata->num_env > 0 ||
         nsdata->capsadd || nsdata->capsdel ||
         nsdata->deprecationBehavior)
         *data = g_steal_pointer(&nsdata);
@@ -3508,17 +3508,17 @@ static void
 qemuDomainDefNamespaceFormatXMLCommandline(virBuffer *buf,
                                            qemuDomainXmlNsDef *cmd)
 {
+    GStrv n;
     size_t i;
 
-    if (!cmd->num_args && !cmd->num_env)
+    if (!cmd->args && !cmd->num_env)
         return;
 
     virBufferAddLit(buf, "<qemu:commandline>\n");
     virBufferAdjustIndent(buf, 2);
 
-    for (i = 0; i < cmd->num_args; i++)
-        virBufferEscapeString(buf, "<qemu:arg value='%s'/>\n",
-                              cmd->args[i]);
+    for (n = cmd->args; n && *n; n++)
+        virBufferEscapeString(buf, "<qemu:arg value='%s'/>\n", *n);
     for (i = 0; i < cmd->num_env; i++) {
         virBufferAsprintf(buf, "<qemu:env name='%s'", cmd->env[i].name);
         virBufferEscapeString(buf, " value='%s'", cmd->env[i].value);
@@ -6615,7 +6615,7 @@ void qemuDomainObjCheckTaint(virQEMUDriver *driver,
 
     if (obj->def->namespaceData) {
         qemuDomainXmlNsDef *qemuxmlns = obj->def->namespaceData;
-        if (qemuxmlns->num_args || qemuxmlns->num_env)
+        if (qemuxmlns->args || qemuxmlns->num_env)
             qemuDomainObjTaint(driver, obj, VIR_DOMAIN_TAINT_CUSTOM_ARGV, logCtxt);
         if (qemuxmlns->capsadd || qemuxmlns->capsdel)
             custom_hypervisor_feat = true;
index aa3ed78094cb4aa1e393ec8ab99e3d02fa48ce21..3cfa6cd44e130518a197982646dc7e62b7e54dc5 100644 (file)
@@ -465,7 +465,6 @@ struct _qemuDomainXmlNsEnvTuple {
 
 typedef struct _qemuDomainXmlNsDef qemuDomainXmlNsDef;
 struct _qemuDomainXmlNsDef {
-    size_t num_args;
     char **args;
 
     unsigned int num_env;