[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