[libvirt] [PATCH] openvz: simplify openvzDomainDefineCmd by using virCommandPtr

Guido Günther agx at sigxcpu.org
Sat May 5 09:30:09 UTC 2012


---
While working on setting filesystem quotas I came accross this and I
figured I'll send this in advance because of the diffstat.
Cheers,
 -- Guido

 src/openvz/openvz_driver.c |   79 +++++++++++---------------------------------
 1 file changed, 19 insertions(+), 60 deletions(-)

diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
index 91f5d49..8cceed6 100644
--- a/src/openvz/openvz_driver.c
+++ b/src/openvz/openvz_driver.c
@@ -100,68 +100,31 @@ static void cmdExecFree(const char *cmdExec[])
 /* generate arguments to create OpenVZ container
    return -1 - error
            0 - OK
+   Caller has to free the cmd
 */
-static int
-openvzDomainDefineCmd(const char *args[],
-                      int maxarg, virDomainDefPtr vmdef)
+static virCommandPtr
+openvzDomainDefineCmd(virDomainDefPtr vmdef)
 {
-    int narg;
-
-    for (narg = 0; narg < maxarg; narg++)
-        args[narg] = NULL;
+    virCommandPtr cmd = virCommandNewArgList(VZCTL,
+                                             "--quiet",
+                                             "create",
+                                             NULL);
 
     if (vmdef == NULL) {
         openvzError(VIR_ERR_INTERNAL_ERROR, "%s",
                     _("Container is not defined"));
-        return -1;
+        virCommandFree(cmd);
+        return NULL;
     }
 
-#define ADD_ARG(thisarg)                                                \
-    do {                                                                \
-        if (narg >= maxarg)                                             \
-                 goto no_memory;                                        \
-        args[narg++] = thisarg;                                         \
-    } while (0)
-
-#define ADD_ARG_LIT(thisarg)                                            \
-    do {                                                                \
-        if (narg >= maxarg)                                             \
-                 goto no_memory;                                        \
-        if ((args[narg++] = strdup(thisarg)) == NULL)                   \
-            goto no_memory;                                             \
-    } while (0)
-
-    narg = 0;
-    ADD_ARG_LIT(VZCTL);
-    ADD_ARG_LIT("--quiet");
-    ADD_ARG_LIT("create");
-
-    ADD_ARG_LIT(vmdef->name);
-    ADD_ARG_LIT("--name");
-    ADD_ARG_LIT(vmdef->name);
+    virCommandAddArgList(cmd, vmdef->name, "--name", vmdef->name, NULL);
 
     if (vmdef->nfss == 1 &&
         vmdef->fss[0]->type == VIR_DOMAIN_FS_TYPE_TEMPLATE) {
-        ADD_ARG_LIT("--ostemplate");
-        ADD_ARG_LIT(vmdef->fss[0]->src);
-    }
-#if 0
-    if ((vmdef->profile && *(vmdef->profile))) {
-        ADD_ARG_LIT("--config");
-        ADD_ARG_LIT(vmdef->profile);
+        virCommandAddArgList(cmd, "--ostemplate", vmdef->fss[0]->src, NULL);
     }
-#endif
 
-    ADD_ARG(NULL);
-    return 0;
-
-no_memory:
-    openvzError(VIR_ERR_INTERNAL_ERROR,
-                _("Could not put argument to %s"), VZCTL);
-    return -1;
-
-#undef ADD_ARG
-#undef ADD_ARG_LIT
+    return cmd;
 }
 
 
@@ -170,8 +133,7 @@ static int openvzSetInitialConfig(virDomainDefPtr vmdef)
     int ret = -1;
     int vpsid;
     char * confdir = NULL;
-    const char *prog[OPENVZ_MAX_ARG];
-    prog[0] = NULL;
+    virCommandPtr cmd = NULL;
 
     if (vmdef->nfss > 1) {
         openvzError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -210,24 +172,21 @@ static int openvzSetInitialConfig(virDomainDefPtr vmdef)
                         _("Could not set the source dir for the filesystem"));
             goto cleanup;
         }
-    }
-    else
-    {
-        if (openvzDomainDefineCmd(prog, OPENVZ_MAX_ARG, vmdef) < 0) {
-            VIR_ERROR(_("Error creating command for container"));
+    } else {
+        cmd = openvzDomainDefineCmd(vmdef);
+        if (cmd == NULL)
             goto cleanup;
-        }
 
-        if (virRun(prog, NULL) < 0) {
+        if (virCommandRun(cmd, NULL) < 0)
             goto cleanup;
-        }
     }
 
     ret = 0;
 
 cleanup:
   VIR_FREE(confdir);
-  cmdExecFree(prog);
+  virCommandFree(cmd);
+
   return ret;
 }
 
-- 
1.7.10




More information about the libvir-list mailing list