summaryrefslogtreecommitdiff
path: root/sys/src/cmd/acid/main.c
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2017-06-12 19:28:27 +0000
committeraiju <devnull@localhost>2017-06-12 19:28:27 +0000
commit5dcb407add4013d7234dc248fb97c8a5d146e3d3 (patch)
treeab2a74d4b880c8d0d4b1061da3b1613623ad7173 /sys/src/cmd/acid/main.c
parent7c62868a9fb501b132cb9d2a24b38a19edf13a90 (diff)
acid: provide hooks 'procattach' and 'dying'
Diffstat (limited to 'sys/src/cmd/acid/main.c')
-rw-r--r--sys/src/cmd/acid/main.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/sys/src/cmd/acid/main.c b/sys/src/cmd/acid/main.c
index 9a18f5f53..a69fd2ed7 100644
--- a/sys/src/cmd/acid/main.c
+++ b/sys/src/cmd/acid/main.c
@@ -178,6 +178,8 @@ die(void)
Bprint(bout, "\n");
+ if(setjmp(err) == 0)
+ callhook("dying");
s = look("proclist");
if(s && s->v->type == TLIST) {
for(f = s->v->l; f; f = f->next)
@@ -196,11 +198,26 @@ loadmoduleobjtype(void)
free(buf);
}
-void
-userinit(void)
+int
+callhook(char *name)
{
Lsym *l;
Node *n;
+
+ l = look(name);
+ if(l && l->proc) {
+ n = an(ONAME, ZN, ZN);
+ n->sym = l;
+ n = an(OCALL, n, ZN);
+ execute(n);
+ return 0;
+ }
+ return -1;
+}
+
+void
+userinit(void)
+{
char *buf, *p;
p = getenv("home");
@@ -216,13 +233,7 @@ userinit(void)
unwind();
return;
}
- l = look("acidinit");
- if(l && l->proc) {
- n = an(ONAME, ZN, ZN);
- n->sym = l;
- n = an(OCALL, n, ZN);
- execute(n);
- }
+ callhook("acidinit");
}
void