]> pd.if.org Git - pdclib/blob - platform/win32/functions/signal/signal.c
dc0b8ce6e28755045788986c394dc9b0fa860ddc
[pdclib] / platform / win32 / 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 #include <errno.h>
9
10 #ifndef REGTEST
11
12 #include <stdlib.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             /* The standard calls for an unspecified "positive value". You
56                will probably want to define a specific value for this.
57             */
58             errno = 1;
59             return SIG_ERR;
60     }
61     return oldhandler;
62 }
63
64 #endif
65
66 #ifdef TEST
67 #include <_PDCLIB_test.h>
68
69 int main( void )
70 {
71     /* Testing covered by raise.c */
72     return TEST_RESULTS;
73 }
74 #endif