[libvirt] [PATCH 1/6] command: Add virCommandEnvAddFormat
Daniel P. Berrange
berrange at redhat.com
Tue May 10 09:45:19 UTC 2011
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 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
> */
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 :|
More information about the libvir-list
mailing list