1 fd04aace 2003-11-23 devnull #include <u.h>
2 fd04aace 2003-11-23 devnull #include <libc.h>
4 fd04aace 2003-11-23 devnull #define NEXIT 33
6 fd04aace 2003-11-23 devnull static Lock onexlock;
7 fd04aace 2003-11-23 devnull static struct
9 fd04aace 2003-11-23 devnull void (*f)(void);
11 fd04aace 2003-11-23 devnull }onex[NEXIT];
14 fd04aace 2003-11-23 devnull atexit(void (*f)(void))
18 fd04aace 2003-11-23 devnull lock(&onexlock);
19 fd04aace 2003-11-23 devnull for(i=0; i<NEXIT; i++)
20 fd04aace 2003-11-23 devnull if(onex[i].f == 0) {
21 fd04aace 2003-11-23 devnull onex[i].pid = getpid();
22 fd04aace 2003-11-23 devnull onex[i].f = f;
23 fd04aace 2003-11-23 devnull unlock(&onexlock);
24 fd04aace 2003-11-23 devnull return 1;
26 fd04aace 2003-11-23 devnull unlock(&onexlock);
27 fd04aace 2003-11-23 devnull return 0;
31 fd04aace 2003-11-23 devnull atexitdont(void (*f)(void))
33 fd04aace 2003-11-23 devnull int i, pid;
35 fd04aace 2003-11-23 devnull pid = getpid();
36 fd04aace 2003-11-23 devnull for(i=0; i<NEXIT; i++)
37 fd04aace 2003-11-23 devnull if(onex[i].f == f && onex[i].pid == pid)
38 fd04aace 2003-11-23 devnull onex[i].f = 0;
42 fd04aace 2003-11-23 devnull exits(char *s)
44 fd04aace 2003-11-23 devnull int i, pid;
45 fd04aace 2003-11-23 devnull void (*f)(void);
47 fd04aace 2003-11-23 devnull pid = getpid();
48 fd04aace 2003-11-23 devnull for(i = NEXIT-1; i >= 0; i--)
49 fd04aace 2003-11-23 devnull if((f = onex[i].f) && pid == onex[i].pid) {
50 fd04aace 2003-11-23 devnull onex[i].f = 0;
53 1555bd7a 2003-11-26 devnull exit(s && *s ? 1 : 0);