xref: /plan9/sys/src/ape/lib/ap/stdio/exit.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1 #include <unistd.h>
2 #define	NONEXIT	34
3 int (*_atexitfns[NONEXIT])(void);
4 void _doatexits(void){
5 	int i, (*f)(void);
6 	for(i = NONEXIT-1; i >= 0; i--)
7 		if(_atexitfns[i]){
8 			f = _atexitfns[i];
9 			_atexitfns[i] = 0;	/* self defense against bozos */
10 			(*f)();
11 		}
12 }
13 void exit(int status)
14 {
15 	_doatexits();
16 	_exit(status);
17 }
18 atexit(int (*f)(void))
19 {
20 	int i;
21 	for(i=0; i<NONEXIT; i++)
22 		if(!_atexitfns[i]){
23 			_atexitfns[i] = f;
24 			return(0);
25 		}
26 	return(1);
27 }
28