X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fstdlib%2Fexit.c;h=8862f4120c899912a696cfda3b40a5b183a187c8;hb=d02f38605b53cdff5460cc6b9e1b2a80c3a2ba4c;hp=969b795f7100fa92de5b503f225060c5de92493f;hpb=ad4ffe2e8341d440dd75980817ad13324699d648;p=pdclib diff --git a/functions/stdlib/exit.c b/functions/stdlib/exit.c index 969b795..8862f41 100644 --- a/functions/stdlib/exit.c +++ b/functions/stdlib/exit.c @@ -16,17 +16,19 @@ functions that had already been called at the time it was registered. */ -struct _PDCLIB_exitfunc_t * regstack = NULL; +/* 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++ ](); } _Exit( status ); } @@ -36,9 +38,8 @@ void exit( int status ) #ifdef TEST #include <_PDCLIB_test.h> -int main() +int main( void ) { - BEGIN_TESTS; /* Unwinding of regstack tested in atexit(). */ return TEST_RESULTS; }