[libvirt] [PATCH 1/6] command: Add virCommandEnvAddFormat

Cole Robinson crobinso at redhat.com
Fri May 6 17:26:06 UTC 2011


Similar to virCommandArgAddFormat. We will use this shortly.

v2:
    Convert virCommandEnvAddPair to use the new function

Signed-off-by: Cole Robinson <crobinso at redhat.com>
---
 src/libvirt_private.syms |    1 +
 src/util/command.c       |   23 ++++++++++++++++++-----
 src/util/command.h       |    7 +++++++
 3 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 1b22be6..d89b191 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -99,6 +99,7 @@ virCommandAddArgList;
 virCommandAddArgPair;
 virCommandAddArgSet;
 virCommandAddEnvBuffer;
+virCommandAddEnvFormat;
 virCommandAddEnvPair;
 virCommandAddEnvPass;
 virCommandAddEnvPassCommon;
diff --git a/src/util/command.c b/src/util/command.c
index 862a913..ff4869d 100644
--- a/src/util/command.c
+++ b/src/util/command.c
@@ -259,23 +259,26 @@ virCommandNonblockingFDs(virCommandPtr cmd)
 }
 
 /*
- * Add an environment variable to the child
- * using separate name & value strings
+ * Add an environment variable to the child created by a printf-style format
  */
 void
-virCommandAddEnvPair(virCommandPtr cmd, const char *name, const char *value)
+virCommandAddEnvFormat(virCommandPtr cmd, const char *format, ...)
 {
     char *env;
+    va_list list;
 
     if (!cmd || cmd->has_error)
         return;
 
-    if (virAsprintf(&env, "%s=%s", name, value ? value : "") < 0) {
+    va_start(list, format);
+    if (virVasprintf(&env, format, list) < 0) {
         cmd->has_error = ENOMEM;
+        va_end(list);
         return;
     }
+    va_end(list);
 
-    /* env plus trailing NULL */
+    /* Arg plus trailing NULL. */
     if (VIR_RESIZE_N(cmd->env, cmd->maxenv, cmd->nenv, 1 + 1) < 0) {
         VIR_FREE(env);
         cmd->has_error = ENOMEM;
@@ -285,6 +288,16 @@ virCommandAddEnvPair(virCommandPtr cmd, const char *name, const char *value)
     cmd->env[cmd->nenv++] = env;
 }
 
+/*
+ * Add an environment variable to the child
+ * using separate name & value strings
+ */
+void
+virCommandAddEnvPair(virCommandPtr cmd, const char *name, const char *value)
+{
+    virCommandAddEnvFormat(cmd, "%s=%s", name, value);
+}
+
 
 /*
  * Add an environment variable to the child
diff --git a/src/util/command.h b/src/util/command.h
index ff8ccf5..69e9169 100644
--- a/src/util/command.h
+++ b/src/util/command.h
@@ -98,6 +98,13 @@ void virCommandDaemonize(virCommandPtr cmd);
 void virCommandNonblockingFDs(virCommandPtr cmd);
 
 /*
+ * Add an environment variable to the child created by a printf-style format
+ */
+void
+virCommandAddEnvFormat(virCommandPtr cmd, const char *format, ...)
+                       ATTRIBUTE_NONNULL(2) ATTRIBUTE_FMT_PRINTF(2, 3);
+
+/*
  * Add an environment variable to the child
  * using separate name & value strings
  */
-- 
1.7.4.4




More information about the libvir-list mailing list