Blob
1 #include <u.h>2 #include <libc.h>4 #define NEXIT 336 static Lock onexlock;7 static struct8 {9 void (*f)(void);10 int pid;11 }onex[NEXIT];13 int14 atexit(void (*f)(void))15 {16 int i;18 lock(&onexlock);19 for(i=0; i<NEXIT; i++)20 if(onex[i].f == 0) {21 onex[i].pid = getpid();22 onex[i].f = f;23 unlock(&onexlock);24 return 1;25 }26 unlock(&onexlock);27 return 0;28 }30 void31 atexitdont(void (*f)(void))32 {33 int i, pid;35 pid = getpid();36 for(i=0; i<NEXIT; i++)37 if(onex[i].f == f && onex[i].pid == pid)38 onex[i].f = 0;39 }41 void42 exits(char *s)43 {44 int i, pid;45 void (*f)(void);47 pid = getpid();48 for(i = NEXIT-1; i >= 0; i--)49 if((f = onex[i].f) && pid == onex[i].pid) {50 onex[i].f = 0;51 (*f)();52 }53 exit(s && *s ? 1 : 0);54 }