diff options
author | Gwenolé Beauchesne <gbeauchesne@mandriva.org> | 2003-06-04 18:31:57 +0000 |
---|---|---|
committer | Gwenolé Beauchesne <gbeauchesne@mandriva.org> | 2003-06-04 18:31:57 +0000 |
commit | 09e967c2d732783b2579e4e120cd9b608404cb00 (patch) | |
tree | 8d2783a6a7e33608c6012efd6a88b8f5694df81d /mdk-stage1/dietlibc/lib/putenv.c | |
parent | 18fcff49d3c836697d3b75a3d01d31c700e69974 (diff) | |
download | drakx-09e967c2d732783b2579e4e120cd9b608404cb00.tar drakx-09e967c2d732783b2579e4e120cd9b608404cb00.tar.gz drakx-09e967c2d732783b2579e4e120cd9b608404cb00.tar.bz2 drakx-09e967c2d732783b2579e4e120cd9b608404cb00.tar.xz drakx-09e967c2d732783b2579e4e120cd9b608404cb00.zip |
Merge from R9_0-AMD64, most notably:
- AMD64 support to insmod-busybox, minilibc, et al.
- Sync with insmod-modutils 2.4.19 something but everyone should use
dietlibc nowadays
- Factor out compilation and prefix with $(DIET) for dietlibc builds
- 64-bit & varargs fixes
Diffstat (limited to 'mdk-stage1/dietlibc/lib/putenv.c')
-rw-r--r-- | mdk-stage1/dietlibc/lib/putenv.c | 19 |
1 files changed, 11 insertions, 8 deletions
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 <stdlib.h> #include <string.h> +#include <errno.h> 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; |