[libvirt] [PATCH 2/3] lxc: Turn @veths into a string list in virLXCProcessStart

Michal Privoznik mprivozn at redhat.com
Thu Jul 26 15:36:28 UTC 2018


This way it will be easier to use autofree.

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---
 src/lxc/lxc_process.c | 24 +++++++++---------------
 1 file changed, 9 insertions(+), 15 deletions(-)

diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c
index d021a890f7..3ac39d598c 100644
--- a/src/lxc/lxc_process.c
+++ b/src/lxc/lxc_process.c
@@ -514,8 +514,7 @@ static int virLXCProcessSetupNamespaces(virConnectPtr conn,
  * virLXCProcessSetupInterfaces:
  * @conn: pointer to connection
  * @def: pointer to virtual machine structure
- * @nveths: number of interfaces
- * @veths: interface names
+ * @veths: string list of interface names
  *
  * Sets up the container interfaces by creating the veth device pairs and
  * attaching the parent end to the appropriate bridge.  The container end
@@ -525,7 +524,6 @@ static int virLXCProcessSetupNamespaces(virConnectPtr conn,
  */
 static int virLXCProcessSetupInterfaces(virConnectPtr conn,
                                         virDomainDefPtr def,
-                                        size_t *nveths,
                                         char ***veths)
 {
     int ret = -1;
@@ -534,6 +532,8 @@ static int virLXCProcessSetupInterfaces(virConnectPtr conn,
     virDomainNetDefPtr net;
     virDomainNetType type;
 
+    *veths = NULL;
+
     for (i = 0; i < def->nnets; i++) {
         char *veth = NULL;
         virNetDevBandwidthPtr actualBandwidth;
@@ -549,9 +549,6 @@ static int virLXCProcessSetupInterfaces(virConnectPtr conn,
         if (virDomainNetAllocateActualDevice(def, net) < 0)
             goto cleanup;
 
-        if (VIR_EXPAND_N(*veths, *nveths, 1) < 0)
-            goto cleanup;
-
         type = virDomainNetGetActualType(net);
         switch (type) {
         case VIR_DOMAIN_NET_TYPE_NETWORK:
@@ -604,7 +601,8 @@ static int virLXCProcessSetupInterfaces(virConnectPtr conn,
             }
         }
 
-        (*veths)[(*nveths)-1] = veth;
+        if (virStringListAdd(veths, veth) < 0)
+            goto cleanup;
 
         if (VIR_STRDUP(def->nets[i]->ifname_guest_actual, veth) < 0)
             goto cleanup;
@@ -902,7 +900,6 @@ int virLXCProcessStop(virLXCDriverPtr driver,
 static virCommandPtr
 virLXCProcessBuildControllerCmd(virLXCDriverPtr driver,
                                 virDomainObjPtr vm,
-                                int nveths,
                                 char **veths,
                                 int *ttyFDs,
                                 size_t nttyFDs,
@@ -987,7 +984,7 @@ virLXCProcessBuildControllerCmd(virLXCDriverPtr driver,
     virCommandAddArg(cmd, "--handshake");
     virCommandAddArgFormat(cmd, "%d", handshakefd);
 
-    for (i = 0; i < nveths; i++)
+    for (i = 0; veths && veths[i]; i++)
         virCommandAddArgList(cmd, "--veth", veths[i], NULL);
 
     virCommandPassFD(cmd, handshakefd, 0);
@@ -1184,7 +1181,6 @@ int virLXCProcessStart(virConnectPtr conn,
     size_t i;
     char *logfile = NULL;
     int logfd = -1;
-    size_t nveths = 0;
     char **veths = NULL;
     int handshakefds[2] = { -1, -1 };
     off_t pos = -1;
@@ -1355,7 +1351,7 @@ int virLXCProcessStart(virConnectPtr conn,
     }
 
     VIR_DEBUG("Setting up Interfaces");
-    if (virLXCProcessSetupInterfaces(conn, vm->def, &nveths, &veths) < 0)
+    if (virLXCProcessSetupInterfaces(conn, vm->def, &veths) < 0)
         goto cleanup;
 
     VIR_DEBUG("Setting up namespaces if any");
@@ -1379,7 +1375,7 @@ int virLXCProcessStart(virConnectPtr conn,
 
     if (!(cmd = virLXCProcessBuildControllerCmd(driver,
                                                 vm,
-                                                nveths, veths,
+                                                veths,
                                                 ttyFDs, nttyFDs,
                                                 nsInheritFDs,
                                                 files, nfiles,
@@ -1559,9 +1555,7 @@ int virLXCProcessStart(virConnectPtr conn,
         virLXCProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_FAILED);
     }
     virCommandFree(cmd);
-    for (i = 0; i < nveths; i++)
-        VIR_FREE(veths[i]);
-    VIR_FREE(veths);
+    virStringListFree(veths);
     for (i = 0; i < nttyFDs; i++)
         VIR_FORCE_CLOSE(ttyFDs[i]);
     VIR_FREE(ttyFDs);
-- 
2.16.4




More information about the libvir-list mailing list