зеркало из https://github.com/microsoft/git.git
Add compat/unsetenv.c .
Implement a (slow) unsetenv() for older systems. Signed-off-by: Jason Riedy <ejr@cs.berkeley.edu> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
5ea06e2014
Коммит
731043fd4d
5
Makefile
5
Makefile
|
@ -232,6 +232,7 @@ ifeq ($(uname_S),SunOS)
|
||||||
SHELL_PATH = /bin/bash
|
SHELL_PATH = /bin/bash
|
||||||
NO_STRCASESTR = YesPlease
|
NO_STRCASESTR = YesPlease
|
||||||
ifeq ($(uname_R),5.8)
|
ifeq ($(uname_R),5.8)
|
||||||
|
NO_UNSETENV = YesPlease
|
||||||
NO_SETENV = YesPlease
|
NO_SETENV = YesPlease
|
||||||
endif
|
endif
|
||||||
INSTALL = ginstall
|
INSTALL = ginstall
|
||||||
|
@ -355,6 +356,10 @@ ifdef NO_SETENV
|
||||||
COMPAT_CFLAGS += -DNO_SETENV
|
COMPAT_CFLAGS += -DNO_SETENV
|
||||||
COMPAT_OBJS += compat/setenv.o
|
COMPAT_OBJS += compat/setenv.o
|
||||||
endif
|
endif
|
||||||
|
ifdef NO_SETENV
|
||||||
|
COMPAT_CFLAGS += -DNO_UNSETENV
|
||||||
|
COMPAT_OBJS += compat/unsetenv.o
|
||||||
|
endif
|
||||||
ifdef NO_MMAP
|
ifdef NO_MMAP
|
||||||
COMPAT_CFLAGS += -DNO_MMAP
|
COMPAT_CFLAGS += -DNO_MMAP
|
||||||
COMPAT_OBJS += compat/mmap.o
|
COMPAT_OBJS += compat/mmap.o
|
||||||
|
|
|
@ -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,3 +1,4 @@
|
||||||
|
#include "git-compat-util.h"
|
||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
#include "pkt-line.h"
|
#include "pkt-line.h"
|
||||||
#include "quote.h"
|
#include "quote.h"
|
||||||
|
|
|
@ -63,6 +63,11 @@ extern int gitfakemunmap(void *start, size_t length);
|
||||||
extern int gitsetenv(const char *, const char *, int);
|
extern int gitsetenv(const char *, const char *, int);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef NO_UNSETENV
|
||||||
|
#define unsetenv gitunsetenv
|
||||||
|
extern void gitunsetenv(const char *);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef NO_STRCASESTR
|
#ifdef NO_STRCASESTR
|
||||||
#define strcasestr gitstrcasestr
|
#define strcasestr gitstrcasestr
|
||||||
extern char *gitstrcasestr(const char *haystack, const char *needle);
|
extern char *gitstrcasestr(const char *haystack, const char *needle);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче