/* $Id$ */
-/* Release $Name$ */
-
/* exit( int )
This file is part of the Public Domain C Library (PDCLib).
#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 ) = { _PDCLIB_closeall };
+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 );
}
#ifdef TEST
#include <_PDCLIB_test.h>
-int main()
+int main( void )
{
- int NO_TESTDRIVER = 0;
- BEGIN_TESTS;
- TESTCASE( NO_TESTDRIVER );
+ /* Unwinding of regstack tested in atexit(). */
return TEST_RESULTS;
}