]> pd.if.org Git - pdclib/blobdiff - functions/stdlib/exit.c
PDCLib includes with quotes, not <>.
[pdclib] / functions / stdlib / exit.c
index 5cb2a508fe19838baa4e9e95f08707af90e671c4..fa91ade1876d2b75a1626356a37f4cc57f0d243d 100644 (file)
@@ -1,7 +1,3 @@
-/* $Id$ */
-
-/* Release $Name$ */
-
 /* exit( int )
 
    This file is part of the Public Domain C Library (PDCLib).
 #include <stdlib.h>
 
 #ifndef REGTEST
+#include "_PDCLIB_io.h"
+
+/* 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
 
-struct _PDCLIB_exitfunc_t * regstack = NULL;
+void (*_PDCLIB_exitstack[ NUMBER_OF_SLOTS ])( void ) = { _PDCLIB_closeall };
+size_t _PDCLIB_exitptr = NUMBER_OF_SLOTS;
 
 void exit( int status )
 {
-    struct _PDCLIB_exitfunc_t * next = regstack;
-    while ( next != NULL )
+    while ( _PDCLIB_exitptr < NUMBER_OF_SLOTS )
     {
-        next->func();
-        regstack = next->next;
-        free( next );
-        next = regstack;
+        _PDCLIB_exitstack[ _PDCLIB_exitptr++ ]();
     }
-    /* TODO: Flush and close open streams. Remove tmpfile() files. */
     _Exit( status );
 }
 
 #endif
 
 #ifdef TEST
-#include <_PDCLIB_test.h>
+#include "_PDCLIB_test.h"
 
-int main()
+int main( void )
 {
-    BEGIN_TESTS;
-    TESTCASE( NO_TESTDRIVER );
+    /* Unwinding of regstack tested in atexit(). */
     return TEST_RESULTS;
 }