summaryrefslogtreecommitdiff
path: root/sys/src/cmd/awk
diff options
context:
space:
mode:
authorspew <devnull@localhost>2016-05-01 20:54:46 -0500
committerspew <devnull@localhost>2016-05-01 20:54:46 -0500
commit9ccbf1dcb15a69dbe21a6767c137537f3a5863af (patch)
treed322d7bb31eb73af1685e4e9bdd7696de55152fa /sys/src/cmd/awk
parentee68dedf53695895630fd9a463429a8d34a9679c (diff)
just use wait in "system" call for awk, get rid of unix dependent status code divisor
Diffstat (limited to 'sys/src/cmd/awk')
-rw-r--r--sys/src/cmd/awk/run.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/sys/src/cmd/awk/run.c b/sys/src/cmd/awk/run.c
index d3244de1c..1fbb217a1 100644
--- a/sys/src/cmd/awk/run.c
+++ b/sys/src/cmd/awk/run.c
@@ -62,11 +62,11 @@ Node *curnode = nil; /* the node being executed, for debugging */
int
system(const char *s)
{
- char status[512], *statfld[5];
- int n, pid;
+ Waitmsg *status;
+ int pid;
- if(!s)
- return 1; /* a command interpreter is available */
+ if(s == nil)
+ return 1;
pid = fork();
if(pid == 0) {
execl("/bin/rc", "rc", "-c", s, nil);
@@ -76,17 +76,19 @@ system(const char *s)
return -1;
}
for(;;) {
- n = await(status, sizeof(status) - 1);
- status[n] = '\0';
- if(n == -1)
- return -1;
- tokenize(status, statfld, nelem(statfld));
- if(strtol(statfld[0], nil, 0) == pid)
+ status = wait();
+ if(status == nil)
+ FATAL("Out of memory");
+ if(status->pid == pid)
break;
+ free(status);
}
- if(*statfld[4] != '\0')
+ if(status->msg[0] != '\0') {
+ free(status);
return 1;
+ }
+ free(status);
return 0;
}
@@ -1582,7 +1584,7 @@ Cell *bltin(Node **a, int) /* builtin functions. a[0] is type, a[1] is arg list
break;
case FSYSTEM:
Bflush(&stdout); /* in case something is buffered already */
- u = (Awkfloat) system(getsval(x)) / 256; /* 256 is unix-dep */
+ u = (Awkfloat) system(getsval(x));
break;
case FRAND:
/* in principle, rand() returns something in 0..RAND_MAX */