Re: [PATCH v1 2/2] command: Change virCommandAddEnv so it replaces existing environment variables.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 09/24/2012 12:54 PM, Richard W.M. Jones wrote:
> From: "Richard W.M. Jones" <rjones@xxxxxxxxxx>
> 
> ---
>  src/util/command.c |   17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/src/util/command.c b/src/util/command.c
> index f7d92dd..354e526 100644
> --- a/src/util/command.c
> +++ b/src/util/command.c
> @@ -985,11 +985,26 @@ virCommandNonblockingFDs(virCommandPtr cmd)
>  }
>  
>  /* Add an environment variable to the cmd->env list.  'env' is a
> - * string like "name=value".
> + * string like "name=value".  If the named environment variable is
> + * already set, then it is replaced in the list.
>   */
>  static inline void
>  virCommandAddEnv(virCommandPtr cmd, char *env)
>  {
> +    size_t namelen;
> +    size_t i;
> +
> +    /* Search for the name in the existing environment. */
> +    namelen = strcspn(env, "=");

Would 'strchr(env, '=') - env' be any more efficient?  But that's a
micro-optimization, probably not worth worrying about.

> +    for (i = 0; i < cmd->nenv; ++i) {
> +        /* +1 because we want to match the '=' character too. */
> +        if (STREQLEN(cmd->env[i], env, namelen+1)) {

Coding style - spaces on both sides of '+'.  Or even hoist the +1
outside of the loop to the original computation of namelen.

ACK with that fix.

-- 
Eric Blake   eblake@xxxxxxxxxx    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]