13e12c5d1SDavid du Colombier #include <unistd.h> 23e12c5d1SDavid du Colombier #define NONEXIT 34 33e12c5d1SDavid du Colombier int (*_atexitfns[NONEXIT])(void); 4*219b2ee8SDavid du Colombier void _doatexits(void){ 53e12c5d1SDavid du Colombier int i, (*f)(void); 63e12c5d1SDavid du Colombier for(i = NONEXIT-1; i >= 0; i--) 73e12c5d1SDavid du Colombier if(_atexitfns[i]){ 83e12c5d1SDavid du Colombier f = _atexitfns[i]; 93e12c5d1SDavid du Colombier _atexitfns[i] = 0; /* self defense against bozos */ 103e12c5d1SDavid du Colombier (*f)(); 113e12c5d1SDavid du Colombier } 12*219b2ee8SDavid du Colombier } 13*219b2ee8SDavid du Colombier void exit(int status) 14*219b2ee8SDavid du Colombier { 15*219b2ee8SDavid du Colombier _doatexits(); 163e12c5d1SDavid du Colombier _exit(status); 173e12c5d1SDavid du Colombier } 183e12c5d1SDavid du Colombier atexit(int (*f)(void)) 193e12c5d1SDavid du Colombier { 203e12c5d1SDavid du Colombier int i; 213e12c5d1SDavid du Colombier for(i=0; i<NONEXIT; i++) 223e12c5d1SDavid du Colombier if(!_atexitfns[i]){ 233e12c5d1SDavid du Colombier _atexitfns[i] = f; 243e12c5d1SDavid du Colombier return(0); 253e12c5d1SDavid du Colombier } 263e12c5d1SDavid du Colombier return(1); 273e12c5d1SDavid du Colombier } 28