diff options
author | Johannes Sixt <j6t@kdbg.org> | 2009-09-11 19:40:08 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-09-11 16:33:54 -0700 |
commit | 2affea4125a0ae6c528a14f14731748c1fad9a8a (patch) | |
tree | 81ba1ff206e66c92aa340ba4615a3d901039b150 /compat | |
parent | 434a6db7dcf8688fe08098e218113c18b7c9aeaf (diff) | |
download | git-2affea4125a0ae6c528a14f14731748c1fad9a8a.tar.gz git-2affea4125a0ae6c528a14f14731748c1fad9a8a.tar.xz |
start_command: do not clobber cmd->env on Windows code path
Previously, it would not be possible to call start_command twice for the
same struct child_process that has env set.
The fix is achieved by moving the loop that modifies the environment block
into a helper function. This also allows us to make two other helper
functions static.
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'compat')
-rw-r--r-- | compat/mingw.c | 16 | ||||
-rw-r--r-- | compat/mingw.h | 3 |
2 files changed, 15 insertions, 4 deletions
diff --git a/compat/mingw.c b/compat/mingw.c index bed417875..36ef8d321 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -824,7 +824,7 @@ void mingw_execvp(const char *cmd, char *const *argv) free_path_split(path); } -char **copy_environ() +static char **copy_environ(void) { char **env; int i = 0; @@ -861,7 +861,7 @@ static int lookup_env(char **env, const char *name, size_t nmln) /* * If name contains '=', then sets the variable, otherwise it unsets it */ -char **env_setenv(char **env, const char *name) +static char **env_setenv(char **env, const char *name) { char *eq = strchrnul(name, '='); int i = lookup_env(env, name, eq-name); @@ -886,6 +886,18 @@ char **env_setenv(char **env, const char *name) return env; } +/* + * Copies global environ and adjusts variables as specified by vars. + */ +char **make_augmented_environ(const char *const *vars) +{ + char **env = copy_environ(); + + while (*vars) + env = env_setenv(env, *vars++); + return env; +} + /* this is the first function to call into WS_32; initialize it */ #undef gethostbyname struct hostent *mingw_gethostbyname(const char *host) diff --git a/compat/mingw.h b/compat/mingw.h index 948de66eb..c43917cd6 100644 --- a/compat/mingw.h +++ b/compat/mingw.h @@ -222,9 +222,8 @@ void mingw_open_html(const char *path); * helpers */ -char **copy_environ(void); +char **make_augmented_environ(const char *const *vars); void free_environ(char **env); -char **env_setenv(char **env, const char *name); /* * A replacement of main() that ensures that argv[0] has a path |