diff options
author | aiju <devnull@localhost> | 2017-06-12 19:28:27 +0000 |
---|---|---|
committer | aiju <devnull@localhost> | 2017-06-12 19:28:27 +0000 |
commit | 5dcb407add4013d7234dc248fb97c8a5d146e3d3 (patch) | |
tree | ab2a74d4b880c8d0d4b1061da3b1613623ad7173 /sys/src/cmd/acid/main.c | |
parent | 7c62868a9fb501b132cb9d2a24b38a19edf13a90 (diff) |
acid: provide hooks 'procattach' and 'dying'
Diffstat (limited to 'sys/src/cmd/acid/main.c')
-rw-r--r-- | sys/src/cmd/acid/main.c | 29 |
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 |