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