From de47eb59bb829423b1d0f47ba13099073999b3cb Mon Sep 17 00:00:00 2001 From: Nicolas Planel Date: Wed, 29 Oct 2003 16:07:11 +0000 Subject: Corporate Server 2.1.1 release --- mdk-stage1/dietlibc/lib/putenv.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'mdk-stage1/dietlibc/lib/putenv.c') diff --git a/mdk-stage1/dietlibc/lib/putenv.c b/mdk-stage1/dietlibc/lib/putenv.c index 274b16b0e..448d59840 100644 --- a/mdk-stage1/dietlibc/lib/putenv.c +++ b/mdk-stage1/dietlibc/lib/putenv.c @@ -1,21 +1,24 @@ #include #include +#include int putenv(const char *string) { - int len; + size_t len; int envc; + int remove=0; char *tmp; const char **ep; char **newenv; - static char **origenv=0; + static char **origenv; if (!origenv) origenv=environ; - if (!(tmp=strchr(string,'='))) + if (!(tmp=strchr(string,'='))) { len=strlen(string); - else + remove=1; + } else len=tmp-string+1; for (envc=0, ep=(const char**)environ; *ep; ++ep) { - if (!memcmp(string,*ep,len)) { /* found */ - if (!tmp) { + if (*string == **ep && !memcmp(string,*ep,len)) { + if (remove) { for (; ep[1]; ++ep) ep[0]=ep[1]; ep[0]=0; return 0; @@ -26,11 +29,11 @@ int putenv(const char *string) { ++envc; } if (tmp) { - newenv=(char**)malloc((envc+2)*sizeof(char*)); + newenv = (char**) realloc(environ==origenv?0:origenv, + (envc+2)*sizeof(char*)); if (!newenv) return -1; newenv[0]=(char*)string; memcpy(newenv+1,environ,(envc+1)*sizeof(char*)); - if (environ!=origenv) free(environ); environ=newenv; } return 0; -- cgit v1.2.1