diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-12-03 06:44:30 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-12-03 06:44:30 +0100 |
commit | 84c930a07894e30804469c32d84377b15868bfce (patch) | |
tree | 641b6adc9c4593d55810d1690f45e554d46f4d08 /sys | |
parent | eb9de925c63990f6b19494698e4db1eb9682e46d (diff) |
ape: fix putenv()
writing /env in putenv() doesnt work. exec will create
new enviroment anyway. we have to modify environ array!
Diffstat (limited to 'sys')
-rw-r--r-- | sys/include/ape/bsd.h | 1 | ||||
-rw-r--r-- | sys/include/ape/stdlib.h | 1 | ||||
-rw-r--r-- | sys/src/ape/lib/ap/gen/mkfile | 1 | ||||
-rw-r--r-- | sys/src/ape/lib/ap/plan9/_envsetup.c | 8 | ||||
-rw-r--r-- | sys/src/ape/lib/bsd/mkfile | 1 | ||||
-rw-r--r-- | sys/src/ape/lib/bsd/putenv.c | 32 |
6 files changed, 5 insertions, 39 deletions
diff --git a/sys/include/ape/bsd.h b/sys/include/ape/bsd.h index 007323e0c..4fda476e0 100644 --- a/sys/include/ape/bsd.h +++ b/sys/include/ape/bsd.h @@ -36,7 +36,6 @@ extern int rresvport(int*); extern int rcmd(char**, int, char*, char*, char*, int*); extern char* strdup(char*); extern int strcasecmp(char*, char*); -extern int putenv(char*); extern int strncasecmp(char*, char*,int); extern void* memccpy(void*, void*, int, size_t); diff --git a/sys/include/ape/stdlib.h b/sys/include/ape/stdlib.h index 374e6c566..8288f86b9 100644 --- a/sys/include/ape/stdlib.h +++ b/sys/include/ape/stdlib.h @@ -35,6 +35,7 @@ extern void abort(void); extern int atexit(void (*func)(void)); extern void exit(int); extern char *getenv(const char *); +extern int putenv(char *); extern int system(const char *); extern void *bsearch(const void *, const void *, size_t, size_t, int (*)(const void *, const void *)); extern void qsort(void *, size_t, size_t, int (*)(const void *, const void *)); diff --git a/sys/src/ape/lib/ap/gen/mkfile b/sys/src/ape/lib/ap/gen/mkfile index e9653bba1..970e04aff 100644 --- a/sys/src/ape/lib/ap/gen/mkfile +++ b/sys/src/ape/lib/ap/gen/mkfile @@ -17,6 +17,7 @@ ALLOFILES=\ difftime.$O\ div.$O\ getenv.$O\ + putenv.$O\ isalnum.$O\ itoa.$O\ itol.$O\ diff --git a/sys/src/ape/lib/ap/plan9/_envsetup.c b/sys/src/ape/lib/ap/plan9/_envsetup.c index 6a4f4204e..11f53dc81 100644 --- a/sys/src/ape/lib/ap/plan9/_envsetup.c +++ b/sys/src/ape/lib/ap/plan9/_envsetup.c @@ -45,11 +45,8 @@ _envsetup(void) fdinited = 0; cnt = 0; dfd = _OPEN("/env", 0); - if(dfd < 0) { - static char **emptyenvp = 0; - environ = emptyenvp; - return; - } + if(dfd < 0) + goto done; psize = Envhunk; ps = p = malloc(psize); nd = _dirreadall(dfd, &d9a); @@ -92,6 +89,7 @@ _envsetup(void) free(d9a); if(!fdinited) _fdinit(0, 0); +done: environ = pp = malloc((1+cnt)*sizeof(char *)); p = ps; for(i = 0; i < cnt; i++) { diff --git a/sys/src/ape/lib/bsd/mkfile b/sys/src/ape/lib/bsd/mkfile index 44b4b05fb..3034e13a4 100644 --- a/sys/src/ape/lib/bsd/mkfile +++ b/sys/src/ape/lib/bsd/mkfile @@ -29,7 +29,6 @@ OFILES=\ ntohl.$O\ nptohl.$O\ popen.$O\ - putenv.$O\ rcmd.$O\ readv.$O\ rresvport.$O\ diff --git a/sys/src/ape/lib/bsd/putenv.c b/sys/src/ape/lib/bsd/putenv.c deleted file mode 100644 index 63695ba76..000000000 --- a/sys/src/ape/lib/bsd/putenv.c +++ /dev/null @@ -1,32 +0,0 @@ -#include <sys/types.h> -#include <unistd.h> -#include <fcntl.h> -#include <string.h> - -int -putenv(char *s) -{ - int f, n; - char *value; - char buf[300]; - - value = strchr(s, '='); - if (value) { - n = value-s; - if(n<=0 || n > sizeof(buf)-6) - return -1; - strcpy(buf, "/env/"); - strncpy(buf+5, s, n); - buf[n+5] = 0; - f = creat(buf, 0666); - if(f < 0) - return 1; - value++; - n = strlen(value); - if(write(f, value, n) != n) - return -1; - close(f); - return 0; - } else - return -1; -} |