mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-28 16:45:26 +00:00
command: Change virCommandAddEnv so it replaces existing environment variables.
(cherry picked from commit 2b32735af4
)
This commit is contained in:
parent
94090184c2
commit
eeaa15b6ea
@ -985,11 +985,26 @@ virCommandNonblockingFDs(virCommandPtr cmd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Add an environment variable to the cmd->env list. 'env' is a
|
/* 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
|
static inline void
|
||||||
virCommandAddEnv(virCommandPtr cmd, char *env)
|
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. */
|
/* Arg plus trailing NULL. */
|
||||||
if (VIR_RESIZE_N(cmd->env, cmd->maxenv, cmd->nenv, 1 + 1) < 0) {
|
if (VIR_RESIZE_N(cmd->env, cmd->maxenv, cmd->nenv, 1 + 1) < 0) {
|
||||||
VIR_FREE(env);
|
VIR_FREE(env);
|
||||||
|
Loading…
Reference in New Issue
Block a user