]> pd.if.org Git - pdclib/blob - platform/gandr/functions/signal/signal.c
Removed SVN keyword tags.
[pdclib] / platform / gandr / functions / signal / signal.c
1 /* signal( int sig, void (*func)( int ) )
2
3    This file is part of the Public Domain C Library (PDCLib).
4    Permission is granted to use, modify, and / or redistribute at will.
5 */
6
7 #include <signal.h>
8
9 #ifndef REGTEST
10
11 #include <stdlib.h>
12 #include <errno.h>
13
14 void (*_PDCLIB_sigabrt)( int ) = SIG_DFL;
15 void (*_PDCLIB_sigfpe)( int )  = SIG_DFL;
16 void (*_PDCLIB_sigill)( int )  = SIG_DFL;
17 void (*_PDCLIB_sigint)( int )  = SIG_DFL;
18 void (*_PDCLIB_sigsegv)( int ) = SIG_DFL;
19 void (*_PDCLIB_sigterm)( int ) = SIG_DFL;
20
21 void (*signal( int sig, void (*func)( int ) ) )( int )
22 {
23     void (*oldhandler)( int );
24     if ( sig <= 0 || func == SIG_ERR )
25     {
26         return SIG_ERR;
27     }
28     switch ( sig )
29     {
30         case SIGABRT:
31             oldhandler = _PDCLIB_sigabrt;
32             _PDCLIB_sigabrt = func;
33             break;
34         case SIGFPE:
35             oldhandler = _PDCLIB_sigfpe;
36             _PDCLIB_sigfpe = func;
37             break;
38         case SIGILL:
39             oldhandler = _PDCLIB_sigill;
40             _PDCLIB_sigill = func;
41             break;
42         case SIGINT:
43             oldhandler = _PDCLIB_sigint;
44             _PDCLIB_sigint = func;
45             break;
46         case SIGSEGV:
47             oldhandler = _PDCLIB_sigsegv;
48             _PDCLIB_sigsegv = func;
49             break;
50         case SIGTERM:
51             oldhandler = _PDCLIB_sigterm;
52             _PDCLIB_sigterm = func;
53             break;
54         default:
55             errno = EINVAL;
56             return SIG_ERR;
57     }
58     return oldhandler;
59 }
60
61 #endif
62
63 #ifdef TEST
64 #include <_PDCLIB_test.h>
65
66 int main( void )
67 {
68     /* Testing covered by raise.c */
69     return TEST_RESULTS;
70 }
71 #endif