]> pd.if.org Git - pdclib/blob - functions/stdlib/atexit.c
a81a8cb6ec34f06e1e8174959430c8573afdbc84
[pdclib] / functions / stdlib / atexit.c
1 /* $Id$ */
2
3 /* atexit( void (*)( void ) )
4
5    This file is part of the Public Domain C Library (PDCLib).
6    Permission is granted to use, modify, and / or redistribute at will.
7 */
8
9 #include <stdlib.h>
10
11 #ifndef REGTEST
12
13 extern void (*_PDCLIB_regstack[])( void );
14 extern size_t _PDCLIB_regptr;
15
16 int atexit( void (*func)( void ) )
17 {
18     if ( _PDCLIB_regptr == 0 )
19     {
20         return -1;
21     }
22     else
23     {
24         _PDCLIB_regstack[ --_PDCLIB_regptr ] = func;
25         return 0;
26     }
27 }
28
29 #endif
30
31 #ifdef TEST
32 #include <_PDCLIB_test.h>
33 #include <assert.h>
34
35 static int flags[ 32 ];
36
37 static void counthandler( void )
38 {
39     static int count = 0;
40     flags[ count ] = count;
41     ++count;
42 }
43
44 static void checkhandler( void )
45 {
46     for ( int i = 0; i < 31; ++i )
47     {
48         assert( flags[ i ] == i );
49     }
50 }
51
52 int main( void )
53 {
54     TESTCASE( atexit( &checkhandler ) == 0 );
55     for ( int i = 0; i < 31; ++i )
56     {
57         TESTCASE( atexit( &counthandler ) == 0 );
58     }
59     return TEST_RESULTS;
60 }
61
62 #endif