]> pd.if.org Git - pdclib/blobdiff - functions/stdlib/atexit.c
PDCLib includes with quotes, not <>.
[pdclib] / functions / stdlib / atexit.c
index 573e4ba68bf706590b71e377ba0e21cbf45eae46..808bcb1176406ff4c855d38e0097dbc32793f012 100644 (file)
@@ -1,7 +1,3 @@
-/* $Id$ */
-
-/* Release $Name$ */
-
 /* atexit( void (*)( void ) )
 
    This file is part of the Public Domain C Library (PDCLib).
 
 #ifndef REGTEST
 
-/* TODO: Required by both atexit() and exit(). */
-struct _PDCLIB_exitfunc_t
-{
-    struct _PDCLIB_exitfunc_t * next;
-    void (*func)( void );
-};
-
-extern struct _PDCLIB_exitfunc_t * regstack;
+extern void (*_PDCLIB_exitstack[])( void );
+extern size_t _PDCLIB_exitptr;
 
 int atexit( void (*func)( void ) )
 {
-    struct _PDCLIB_exitfunc_t * regfunc = (struct _PDCLIB_exitfunc_t *)malloc( sizeof( struct _PDCLIB_exitfunc_t ) );
-    if ( regfunc == NULL )
+    if ( _PDCLIB_exitptr == 0 )
     {
         return -1;
     }
     else
     {
-        regfunc->func = func;
-       regfunc->next = regstack;
-       regstack = regfunc;
-       return 0;
+        _PDCLIB_exitstack[ --_PDCLIB_exitptr ] = func;
+        return 0;
     }
 }
 
 #endif
 
 #ifdef TEST
-#include <_PDCLIB_test.h>
+#include "_PDCLIB_test.h"
+#include <assert.h>
+
+static int flags[ 32 ];
+
+static void counthandler( void )
+{
+    static int count = 0;
+    flags[ count ] = count;
+    ++count;
+}
 
-int main()
+static void checkhandler( void )
 {
-    int NO_TESTDRIVER = 0;
-    BEGIN_TESTS;
-    TESTCASE( NO_TESTDRIVER );
+    for ( int i = 0; i < 31; ++i )
+    {
+        assert( flags[ i ] == i );
+    }
+}
+
+int main( void )
+{
+    TESTCASE( atexit( &checkhandler ) == 0 );
+    for ( int i = 0; i < 31; ++i )
+    {
+        TESTCASE( atexit( &counthandler ) == 0 );
+    }
     return TEST_RESULTS;
 }