summaryrefslogtreecommitdiff
path: root/sys/src/cmd/5e/5e.c
diff options
context:
space:
mode:
authoraiju <aiju@phicode.de>2011-06-24 15:10:22 +0200
committeraiju <aiju@phicode.de>2011-06-24 15:10:22 +0200
commit81d393942d8834b6e071ab0957b655a99e737486 (patch)
treea4b6c1cc206c87d46f390139502e03dafddd9c2a /sys/src/cmd/5e/5e.c
parenta3e9415aa8cdba6059c972c582e3645c4c112139 (diff)
updated 5e
Diffstat (limited to 'sys/src/cmd/5e/5e.c')
-rw-r--r--sys/src/cmd/5e/5e.c30
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");