Skip to content

Commit

Permalink
Add compat/unsetenv.c .
Browse files Browse the repository at this point in the history
Implement a (slow) unsetenv() for older systems.

Signed-off-by: Jason Riedy <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
Jason Riedy authored and Junio C Hamano committed Jan 25, 2006
1 parent 5ea06e2 commit 731043f
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 0 deletions.
5 changes: 5 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
26 changes: 26 additions & 0 deletions compat/unsetenv.c
Original file line number Diff line number Diff line change
@@ -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 change: 1 addition & 0 deletions connect.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#include "git-compat-util.h"
#include "cache.h"
#include "pkt-line.h"
#include "quote.h"
Expand Down
5 changes: 5 additions & 0 deletions git-compat-util.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 731043f

Please sign in to comment.