summaryrefslogtreecommitdiff
path: root/sys/src/ape
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-12-03 06:44:30 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2012-12-03 06:44:30 +0100
commit84c930a07894e30804469c32d84377b15868bfce (patch)
tree641b6adc9c4593d55810d1690f45e554d46f4d08 /sys/src/ape
parenteb9de925c63990f6b19494698e4db1eb9682e46d (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/src/ape')
-rw-r--r--sys/src/ape/lib/ap/gen/mkfile1
-rw-r--r--sys/src/ape/lib/ap/plan9/_envsetup.c8
-rw-r--r--sys/src/ape/lib/bsd/mkfile1
-rw-r--r--sys/src/ape/lib/bsd/putenv.c32
4 files changed, 4 insertions, 38 deletions
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;
-}