]> pd.if.org Git - pdclib/blob - platform/example_cygwin/functions/signal/raise.c
Completed <signal.h>, and moved into platform.
[pdclib] / platform / example_cygwin / functions / signal / raise.c
1 /* $Id$ */
2
3 /* raise( 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
11 #ifndef REGTEST
12
13 #include <stdlib.h>
14
15 extern void (*_PDCLIB_sigabrt)( int );
16 extern void (*_PDCLIB_sigfpe)( int );
17 extern void (*_PDCLIB_sigill)( int );
18 extern void (*_PDCLIB_sigint)( int );
19 extern void (*_PDCLIB_sigsegv)( int );
20 extern void (*_PDCLIB_sigterm)( int );
21
22 int raise( int sig )
23 {
24     void (*sighandler)( int );
25     switch ( sig )
26     {
27         case SIGABRT:
28             sighandler = _PDCLIB_sigabrt;
29             break;
30         case SIGFPE:
31             sighandler = _PDCLIB_sigfpe;
32             break;
33         case SIGILL:
34             sighandler = _PDCLIB_sigill;
35             break;
36         case SIGINT:
37             sighandler = _PDCLIB_sigint;
38             break;
39         case SIGSEGV:
40             sighandler = _PDCLIB_sigsegv;
41             break;
42         case SIGTERM:
43             sighandler = _PDCLIB_sigterm;
44             break;
45         default:
46             /* TODO: Implement. */
47             break;
48     }
49     if ( sighandler == SIG_DFL )
50     {
51         _Exit( EXIT_FAILURE );
52     }
53     else if ( sighandler != SIG_IGN )
54     {
55         sighandler = signal( sig, SIG_DFL );
56         sighandler( sig );
57     }
58     return 0;
59 }
60
61 #endif
62
63 #ifdef TEST
64 #include <_PDCLIB_test.h>
65
66 int main( void )
67 {
68     TESTCASE( NO_TESTDRIVER );
69     return TEST_RESULTS;
70 }
71 #endif