]> pd.if.org Git - pdclib/blob - platform/example/functions/signal/signal.c
Removed Cygwin platform.
[pdclib] / platform / example / functions / signal / signal.c
1 /* signal( int, void (*)( 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
13 void (*_PDCLIB_sigabrt)( int ) = SIG_DFL;
14 void (*_PDCLIB_sigfpe)( int )  = SIG_DFL;
15 void (*_PDCLIB_sigill)( int )  = SIG_DFL;
16 void (*_PDCLIB_sigint)( int )  = SIG_DFL;
17 void (*_PDCLIB_sigsegv)( int ) = SIG_DFL;
18 void (*_PDCLIB_sigterm)( int ) = SIG_DFL;
19
20 void (*signal( int sig, void (*func)( int ) ) )( int )
21 {
22     void (*oldhandler)( int );
23     if ( sig <= 0 || func == SIG_ERR )
24     {
25         return SIG_ERR;
26     }
27     switch ( sig )
28     {
29         case SIGABRT:
30             oldhandler = _PDCLIB_sigabrt;
31             _PDCLIB_sigabrt = func;
32             break;
33         case SIGFPE:
34             oldhandler = _PDCLIB_sigfpe;
35             _PDCLIB_sigfpe = func;
36             break;
37         case SIGILL:
38             oldhandler = _PDCLIB_sigill;
39             _PDCLIB_sigill = func;
40             break;
41         case SIGINT:
42             oldhandler = _PDCLIB_sigint;
43             _PDCLIB_sigint = func;
44             break;
45         case SIGSEGV:
46             oldhandler = _PDCLIB_sigsegv;
47             _PDCLIB_sigsegv = func;
48             break;
49         case SIGTERM:
50             oldhandler = _PDCLIB_sigterm;
51             _PDCLIB_sigterm = func;
52             break;
53         default:
54             /* The standard calls for an unspecified "positive value". You
55                will probably want to define a specific value for this.
56             */
57             _PDCLIB_errno = 1;
58             return SIG_ERR;
59     }
60     return oldhandler;
61 }
62
63 #endif
64
65 #ifdef TEST
66 #include <_PDCLIB_test.h>
67
68 int main( void )
69 {
70     /* Testing covered by raise.c */
71     return TEST_RESULTS;
72 }
73 #endif