
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@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 :|