From 731043fd4d55b1561ebb5a53daa4b9ff6dfac046 Mon Sep 17 00:00:00 2001 From: Jason Riedy Date: Wed, 25 Jan 2006 12:38:36 -0800 Subject: [PATCH] Add compat/unsetenv.c . Implement a (slow) unsetenv() for older systems. Signed-off-by: Jason Riedy Signed-off-by: Junio C Hamano --- Makefile | 5 +++++ compat/unsetenv.c | 26 ++++++++++++++++++++++++++ connect.c | 1 + git-compat-util.h | 5 +++++ 4 files changed, 37 insertions(+) create mode 100644 compat/unsetenv.c diff --git a/Makefile b/Makefile index 245f65837..2e953531a 100644 --- a/Makefile +++ b/Makefile @@ -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 000000000..3a5e4ec04 --- /dev/null +++ b/compat/unsetenv.c @@ -0,0 +1,26 @@ +#include +#include + +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; +} diff --git a/connect.c b/connect.c index e1c04e1ea..3f2d65c31 100644 --- a/connect.c +++ b/connect.c @@ -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 12ce6590b..f982b8e48 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); -- 2.26.2