libvirt/0002-command-Change-virCommandAddEnv-so-it-replaces-exist.patch

46 lines
1.4 KiB
Diff

From 2b32735af480055e27400068d27364d521071117 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Mon, 24 Sep 2012 17:35:47 +0100
Subject: [PATCH 2/2] command: Change virCommandAddEnv so it replaces existing
environment variables.
---
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..1adf7b9 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, "=");
+ for (i = 0; i < cmd->nenv; ++i) {
+ /* + 1 because we want to match the '=' character too. */
+ if (STREQLEN(cmd->env[i], env, namelen + 1)) {
+ VIR_FREE(cmd->env[i]);
+ cmd->env[i] = env;
+ return;
+ }
+ }
+
/* Arg plus trailing NULL. */
if (VIR_RESIZE_N(cmd->env, cmd->maxenv, cmd->nenv, 1 + 1) < 0) {
VIR_FREE(env);
--
1.7.10.4