about summary refs log tree commit diff
path: root/compat/unsetenv.c
diff options
context:
space:
mode:
authorVincent Ambo <Vincent Ambo>2020-01-11T23·36+0000
committerVincent Ambo <Vincent Ambo>2020-01-11T23·36+0000
commit1b593e1ea4d2af0f6444d9a7788d5d99abd6fde5 (patch)
treee3accb9beed5c4c1b5a05c99db71ab2841f0ed04 /compat/unsetenv.c
Squashed 'third_party/git/' content from commit cb71568594
git-subtree-dir: third_party/git
git-subtree-split: cb715685942260375e1eb8153b0768a376e4ece7
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;
+}