diff options
author | aiju <aiju@phicode.de> | 2011-06-24 15:10:22 +0200 |
---|---|---|
committer | aiju <aiju@phicode.de> | 2011-06-24 15:10:22 +0200 |
commit | 81d393942d8834b6e071ab0957b655a99e737486 (patch) | |
tree | a4b6c1cc206c87d46f390139502e03dafddd9c2a /sys/src/cmd/5e/5e.c | |
parent | a3e9415aa8cdba6059c972c582e3645c4c112139 (diff) |
updated 5e
Diffstat (limited to 'sys/src/cmd/5e/5e.c')
-rw-r--r-- | sys/src/cmd/5e/5e.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/sys/src/cmd/5e/5e.c b/sys/src/cmd/5e/5e.c index 3aac578d1..b2f23674c 100644 --- a/sys/src/cmd/5e/5e.c +++ b/sys/src/cmd/5e/5e.c @@ -4,9 +4,8 @@ #include "dat.h" #include "fns.h" -Process **PP; - -static int nflag; +int nflag, pflag, bflag; +Ref nproc; void dump(void) @@ -37,23 +36,44 @@ cleanup(void) if(P == nil) return; + remproc(P); + decref(&nproc); freesegs(); fddecref(P->fd); + if(P->path != nil && decref(P->path) == 0) + free(P->path); free(P); } static void usage(void) { - fprint(2, "usage: 5e [ -n ] text [ args ]\n"); + fprint(2, "usage: 5e [-npb] text [...]\n"); exits(nil); } void +suicide(char *fmt, ...) +{ + va_list va; + char buf[1024]; + + va_start(va, fmt); + vsnprint(buf, sizeof(buf), fmt, va); + va_end(va); + fprint(2, "%s\n", buf); + if(!bflag) + exits(buf); + abort(); +} + +void main(int argc, char **argv) { ARGBEGIN { case 'n': nflag++; break; + case 'p': pflag++; break; + case 'b': bflag++; break; default: usage(); } ARGEND; if(argc < 1) @@ -65,6 +85,8 @@ main(int argc, char **argv) atexit(cleanup); if(nflag) adjustns(); + if(pflag) + initfs("armproc", "/proc"); initproc(); if(loadtext(argv[0], argc, argv) < 0) sysfatal("%r"); |