diff options
-rw-r--r-- | Makefile | 5 | ||||
-rw-r--r-- | compat/unsetenv.c | 26 | ||||
-rw-r--r-- | connect.c | 1 | ||||
-rw-r--r-- | git-compat-util.h | 5 |
4 files changed, 37 insertions, 0 deletions
@@ -232,6 +232,7 @@ ifeq ($(uname_S),SunOS) SHELL_PATH = /bin/bash NO_STRCASESTR = YesPlease ifeq ($(uname_R),5.8) + NO_UNSETENV = YesPlease NO_SETENV = YesPlease endif INSTALL = ginstall @@ -355,6 +356,10 @@ ifdef NO_SETENV COMPAT_CFLAGS += -DNO_SETENV COMPAT_OBJS += compat/setenv.o endif +ifdef NO_SETENV + COMPAT_CFLAGS += -DNO_UNSETENV + COMPAT_OBJS += compat/unsetenv.o +endif ifdef NO_MMAP COMPAT_CFLAGS += -DNO_MMAP COMPAT_OBJS += compat/mmap.o diff --git a/compat/unsetenv.c b/compat/unsetenv.c new file mode 100644 index 0000000000..3a5e4ec04a --- /dev/null +++ b/compat/unsetenv.c @@ -0,0 +1,26 @@ +#include <stdlib.h> +#include <string.h> + +void gitunsetenv (const char *name) +{ + extern char **environ; + int src, dst; + size_t nmln; + + nmln = strlen(name); + + for (src = dst = 0; environ[src]; ++src) { + size_t enln; + enln = strlen(environ[src]); + if (enln > nmln) { + /* might match, and can test for '=' safely */ + if (0 == strncmp (environ[src], name, nmln) + && '=' == environ[src][nmln]) + /* matches, so skip */ + continue; + } + environ[dst] = environ[src]; + ++dst; + } + environ[dst] = NULL; +} @@ -1,3 +1,4 @@ +#include "git-compat-util.h" #include "cache.h" #include "pkt-line.h" #include "quote.h" diff --git a/git-compat-util.h b/git-compat-util.h index 12ce6590bb..f982b8e484 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -63,6 +63,11 @@ extern int gitfakemunmap(void *start, size_t length); extern int gitsetenv(const char *, const char *, int); #endif +#ifdef NO_UNSETENV +#define unsetenv gitunsetenv +extern void gitunsetenv(const char *); +#endif + #ifdef NO_STRCASESTR #define strcasestr gitstrcasestr extern char *gitstrcasestr(const char *haystack, const char *needle); |