From 84c930a07894e30804469c32d84377b15868bfce Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Mon, 3 Dec 2012 06:44:30 +0100 Subject: [PATCH] ape: fix putenv() writing /env in putenv() doesnt work. exec will create new enviroment anyway. we have to modify environ array! --- sys/include/ape/bsd.h | 1 - sys/include/ape/stdlib.h | 1 + sys/src/ape/lib/ap/gen/mkfile | 1 + sys/src/ape/lib/ap/plan9/_envsetup.c | 8 +++---- sys/src/ape/lib/bsd/mkfile | 1 - sys/src/ape/lib/bsd/putenv.c | 32 ---------------------------- 6 files changed, 5 insertions(+), 39 deletions(-) delete mode 100644 sys/src/ape/lib/bsd/putenv.c 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 -#include -#include -#include - -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; -}