{"thread":{"id":"3150","subject":"[PATCH] Add compat/unsetenv.c .","startedAt":"2006-01-25T20:38:36Z","lastAt":"2006-01-25T20:38:36Z","messageCount":1,"participants":["Jason Riedy"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"15122","messageId":"10812.1138221516@lotus.CS.Berkeley.EDU","threadId":"3150","inReplyTo":null,"subject":"[PATCH] Add compat/unsetenv.c .","fromName":"Jason Riedy","fromEmail":"ejr@eecs.berkeley.edu","sentAt":"2006-01-25T20:38:36Z","receivedAt":"2006-01-25T20:38:36Z","isPatch":true,"sender":{"key":"ejr@eecs.berkeley.edu","avatar":"https://gravatar.com/avatar/547fa56f887cab01599edab4e9f813c949c1269e02714f20e0496c56185d9837?d=mp&s=160"},"body":"Implement a (slow) unsetenv() for older systems.\n\nSigned-off-by: Jason Riedy <ejr@cs.berkeley.edu>\n\n---\n\n Makefile          |    5 +++++\n compat/unsetenv.c |   26 ++++++++++++++++++++++++++\n connect.c         |    1 +\n git-compat-util.h |    5 +++++\n 4 files changed, 37 insertions(+), 0 deletions(-)\n create mode 100644 compat/unsetenv.c\n\n30e532bf9194724ac7923b07236ec8d3cdfe4a8a\ndiff --git a/Makefile b/Makefile\nindex 245f658..2e95353 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -232,6 +232,7 @@ ifeq ($(uname_S),SunOS)\n \tSHELL_PATH = /bin/bash\n \tNO_STRCASESTR = YesPlease\n \tifeq ($(uname_R),5.8)\n+\t\tNO_UNSETENV = YesPlease\n \t\tNO_SETENV = YesPlease\n \tendif\n \tINSTALL = ginstall\n@@ -355,6 +356,10 @@ ifdef NO_SETENV\n \tCOMPAT_CFLAGS += -DNO_SETENV\n \tCOMPAT_OBJS += compat/setenv.o\n endif\n+ifdef NO_SETENV\n+\tCOMPAT_CFLAGS += -DNO_UNSETENV\n+\tCOMPAT_OBJS += compat/unsetenv.o\n+endif\n ifdef NO_MMAP\n \tCOMPAT_CFLAGS += -DNO_MMAP\n \tCOMPAT_OBJS += compat/mmap.o\ndiff --git a/compat/unsetenv.c b/compat/unsetenv.c\nnew file mode 100644\nindex 0000000..3a5e4ec\n--- /dev/null\n+++ b/compat/unsetenv.c\n@@ -0,0 +1,26 @@\n+#include <stdlib.h>\n+#include <string.h>\n+\n+void gitunsetenv (const char *name)\n+{\n+     extern char **environ;\n+     int src, dst;\n+     size_t nmln;\n+\n+     nmln = strlen(name);\n+\n+     for (src = dst = 0; environ[src]; ++src) {\n+\t  size_t enln;\n+\t  enln = strlen(environ[src]);\n+\t  if (enln > nmln) {\n+               /* might match, and can test for '=' safely */\n+\t       if (0 == strncmp (environ[src], name, nmln)\n+\t\t   && '=' == environ[src][nmln])\n+\t\t    /* matches, so skip */\n+\t\t    continue;\n+\t  }\n+\t  environ[dst] = environ[src];\n+\t  ++dst;\n+     }\n+     environ[dst] = NULL;\n+}\ndiff --git a/connect.c b/connect.c\nindex e1c04e1..3f2d65c 100644\n--- a/connect.c\n+++ b/connect.c\n@@ -1,3 +1,4 @@\n+#include \"git-compat-util.h\"\n #include \"cache.h\"\n #include \"pkt-line.h\"\n #include \"quote.h\"\ndiff --git a/git-compat-util.h b/git-compat-util.h\nindex 12ce659..f982b8e 100644\n--- a/git-compat-util.h\n+++ b/git-compat-util.h\n@@ -63,6 +63,11 @@ extern int gitfakemunmap(void *start, si\n extern int gitsetenv(const char *, const char *, int);\n #endif\n \n+#ifdef NO_UNSETENV\n+#define unsetenv gitunsetenv\n+extern void gitunsetenv(const char *);\n+#endif\n+\n #ifdef NO_STRCASESTR\n #define strcasestr gitstrcasestr\n extern char *gitstrcasestr(const char *haystack, const char *needle);\n-- \n1.0.GIT\n"}]}