diff --git a/sys/src/cmd/acid/acid.h b/sys/src/cmd/acid/acid.h index 41f63db4f..1938f5471 100644 --- a/sys/src/cmd/acid/acid.h +++ b/sys/src/cmd/acid/acid.h @@ -178,6 +178,7 @@ void append(Node*, Node*, Node*); int bool(Node*); void build(Node*); void call(char*, Node*, Node*, Node*, Node*); +int callhook(char*); void catcher(void*, char*); void checkqid(int, int); void cmd(void); 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 diff --git a/sys/src/cmd/acid/proc.c b/sys/src/cmd/acid/proc.c index 16661ef5f..f6371d9ad 100644 --- a/sys/src/cmd/acid/proc.c +++ b/sys/src/cmd/acid/proc.c @@ -189,6 +189,8 @@ install(int pid) l->next = s->v->l; s->v->l = l; s->v->set = 1; + + callhook("procattach"); } void