about summary refs log tree commit diff
path: root/compat/unsetenv.c
diff options
context:
space:
mode:
Diffstat (limited to 'compat/unsetenv.c')
-rw-r--r--compat/unsetenv.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/compat/unsetenv.c b/compat/unsetenv.c
new file mode 100644
index 000000000000..bf5fd7063bc9
--- /dev/null
+++ b/compat/unsetenv.c
@@ -0,0 +1,27 @@
+#include "../git-compat-util.h"
+
+void gitunsetenv (const char *name)
+{
+#if !defined(__MINGW32__)
+     extern char **environ;
+#endif
+     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;
+}