From f8fd915d0c397c59ccf2f0cb96552e19b440dde8 Mon Sep 17 00:00:00 2001 From: Johannes Sixt Date: Sun, 18 Nov 2007 20:22:04 +0100 Subject: [PATCH] Move environment functions from spawn-pipe.c to compat/mingw.c We want to get rid of spawn-pipe.*, but these functions will be needed. On the way, the function signature was changed to avoid warnings about incompatible pointer types when the argument is the global variable "environ". --- compat/mingw.c | 39 +++++++++++++++++++++++++++++++++++++++ git-compat-util.h | 4 ++++ spawn-pipe.c | 39 --------------------------------------- spawn-pipe.h | 3 --- 4 files changed, 43 insertions(+), 42 deletions(-) diff --git a/compat/mingw.c b/compat/mingw.c index 384b3b67a1..0456319ba6 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -536,6 +536,45 @@ void mingw_execvp(const char *cmd, const char **argv) mingw_free_path_split(path); } +char **copy_environ() +{ + return copy_env(environ); +} + +char **copy_env(char **env) +{ + char **s; + int n = 1; + for (s = env; *s; s++) + n++; + s = xmalloc(n*sizeof(char *)); + memcpy(s, env, n*sizeof(char *)); + return s; +} + +void env_unsetenv(char **env, const char *name) +{ + int src, dst; + size_t nmln; + + nmln = strlen(name); + + for (src = dst = 0; env[src]; ++src) { + size_t enln; + enln = strlen(env[src]); + if (enln > nmln) { + /* might match, and can test for '=' safely */ + if (0 == strncmp (env[src], name, nmln) + && '=' == env[src][nmln]) + /* matches, so skip */ + continue; + } + env[dst] = env[src]; + ++dst; + } + env[dst] = NULL; +} + int mingw_socket(int domain, int type, int protocol) { SOCKET s = WSASocket(domain, type, protocol, NULL, 0, 0); diff --git a/git-compat-util.h b/git-compat-util.h index a259da5eeb..768e7fc696 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -473,6 +473,10 @@ static inline int waitpid(pid_t pid, unsigned *status, unsigned options) #define SIGCHLD 0 #define SIGPIPE 0 +char **copy_environ(); +char **copy_env(char **env); +void env_unsetenv(char **env, const char *name); + unsigned int sleep (unsigned int __seconds); const char *inet_ntop(int af, const void *src, char *dst, size_t cnt); diff --git a/spawn-pipe.c b/spawn-pipe.c index 71232066c5..9cb0cf5b70 100644 --- a/spawn-pipe.c +++ b/spawn-pipe.c @@ -129,42 +129,3 @@ int spawnvppe_pipe(const char *cmd, const char **argv, const char **env, return pid; } - -const char **copy_environ() -{ - return copy_env(environ); -} - -const char **copy_env(const char **env) -{ - const char **s; - int n = 1; - for (s = env; *s; s++) - n++; - s = xmalloc(n*sizeof(const char *)); - memcpy(s, env, n*sizeof(const char *)); - return s; -} - -void env_unsetenv(const char **env, const char *name) -{ - int src, dst; - size_t nmln; - - nmln = strlen(name); - - for (src = dst = 0; env[src]; ++src) { - size_t enln; - enln = strlen(env[src]); - if (enln > nmln) { - /* might match, and can test for '=' safely */ - if (0 == strncmp (env[src], name, nmln) - && '=' == env[src][nmln]) - /* matches, so skip */ - continue; - } - env[dst] = env[src]; - ++dst; - } - env[dst] = NULL; -} diff --git a/spawn-pipe.h b/spawn-pipe.h index 3807819ae8..9bf387e411 100644 --- a/spawn-pipe.h +++ b/spawn-pipe.h @@ -1,5 +1,2 @@ int spawnvppe_pipe(const char *cmd, const char **argv, const char **env, char **path, int pin[], int pout[]); int spawnvpe_pipe(const char *cmd, const char **argv, const char **env, int pin[], int pout[]); -const char **copy_environ(); -const char **copy_env(const char **env); -void env_unsetenv(const char **env, const char *name);