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