On Fri, May 06, 2011 at 01:26:06PM -0400, Cole Robinson wrote:
Similar to virCommandArgAddFormat. We will use this shortly.
v2:
Convert virCommandEnvAddPair to use the new function
Signed-off-by: Cole Robinson <crobinso(a)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
*/
ACK
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|