X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fstdlib%2Fexit.c;h=0d816a3bba1a6ecd9b9b867bfc0fbe4ab0d22479;hb=0788e1f853cae7be12203116b0d277ab1d653afb;hp=520757d501bd04667ae2aa3380de297c0c0979c4;hpb=9776b3400080a53347b2d45de16617342d4c7794;p=pdclib diff --git a/functions/stdlib/exit.c b/functions/stdlib/exit.c index 520757d..0d816a3 100644 --- a/functions/stdlib/exit.c +++ b/functions/stdlib/exit.c @@ -12,19 +12,24 @@ #ifndef REGTEST -struct _PDCLIB_exitfunc_t * regstack = NULL; +/* TODO - "except that a function is called after any previously registered + functions that had already been called at the time it was registered. +*/ + +/* TODO: 32 is guaranteed. This should be dynamic but ATM gives problems + with my malloc. +*/ +#define NUMBER_OF_SLOTS 40 + +void (*_PDCLIB_regstack[ NUMBER_OF_SLOTS ])( void ); +size_t _PDCLIB_regptr = NUMBER_OF_SLOTS; void exit( int status ) { - struct _PDCLIB_exitfunc_t * next = regstack; - while ( next != NULL ) + while ( _PDCLIB_regptr < NUMBER_OF_SLOTS ) { - next->func(); - regstack = next->next; - free( next ); - next = regstack; + _PDCLIB_regstack[ _PDCLIB_regptr++ ](); } - /* TODO: Flush and close open streams. Remove tmpfile() files. */ _Exit( status ); } @@ -35,9 +40,8 @@ void exit( int status ) int main() { - int NO_TESTDRIVER = 0; BEGIN_TESTS; - TESTCASE( NO_TESTDRIVER ); + /* Unwinding of regstack tested in atexit(). */ return TEST_RESULTS; }