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