1*3e12c5d1SDavid du Colombier #include <unistd.h> 2*3e12c5d1SDavid du Colombier #define NONEXIT 34 3*3e12c5d1SDavid du Colombier int (*_atexitfns[NONEXIT])(void); 4*3e12c5d1SDavid du Colombier void exit(int status){ 5*3e12c5d1SDavid du Colombier int i, (*f)(void); 6*3e12c5d1SDavid du Colombier for(i = NONEXIT-1; i >= 0; i--) 7*3e12c5d1SDavid du Colombier if(_atexitfns[i]){ 8*3e12c5d1SDavid du Colombier f = _atexitfns[i]; 9*3e12c5d1SDavid du Colombier _atexitfns[i] = 0; /* self defense against bozos */ 10*3e12c5d1SDavid du Colombier (*f)(); 11*3e12c5d1SDavid du Colombier } 12*3e12c5d1SDavid du Colombier _exit(status); 13*3e12c5d1SDavid du Colombier } 14*3e12c5d1SDavid du Colombier atexit(int (*f)(void)) 15*3e12c5d1SDavid du Colombier { 16*3e12c5d1SDavid du Colombier int i; 17*3e12c5d1SDavid du Colombier for(i=0; i<NONEXIT; i++) 18*3e12c5d1SDavid du Colombier if(!_atexitfns[i]){ 19*3e12c5d1SDavid du Colombier _atexitfns[i] = f; 20*3e12c5d1SDavid du Colombier return(0); 21*3e12c5d1SDavid du Colombier } 22*3e12c5d1SDavid du Colombier return(1); 23*3e12c5d1SDavid du Colombier } 24