Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/waterbox/libc/functions/signal/signal.c
2 views
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
void (*_PDCLIB_sigabrt)( int ) = SIG_DFL;
13
void (*_PDCLIB_sigfpe)( int ) = SIG_DFL;
14
void (*_PDCLIB_sigill)( int ) = SIG_DFL;
15
void (*_PDCLIB_sigint)( int ) = SIG_DFL;
16
void (*_PDCLIB_sigsegv)( int ) = SIG_DFL;
17
void (*_PDCLIB_sigterm)( int ) = SIG_DFL;
18
19
void (*signal( int sig, void (*func)( int ) ) )( int )
20
{
21
void (*oldhandler)( int );
22
if ( sig <= 0 || func == SIG_ERR )
23
{
24
return SIG_ERR;
25
}
26
switch ( sig )
27
{
28
case SIGABRT:
29
oldhandler = _PDCLIB_sigabrt;
30
_PDCLIB_sigabrt = func;
31
break;
32
case SIGFPE:
33
oldhandler = _PDCLIB_sigfpe;
34
_PDCLIB_sigfpe = func;
35
break;
36
case SIGILL:
37
oldhandler = _PDCLIB_sigill;
38
_PDCLIB_sigill = func;
39
break;
40
case SIGINT:
41
oldhandler = _PDCLIB_sigint;
42
_PDCLIB_sigint = func;
43
break;
44
case SIGSEGV:
45
oldhandler = _PDCLIB_sigsegv;
46
_PDCLIB_sigsegv = func;
47
break;
48
case SIGTERM:
49
oldhandler = _PDCLIB_sigterm;
50
_PDCLIB_sigterm = func;
51
break;
52
default:
53
errno = EINVAL;
54
return SIG_ERR;
55
}
56
return oldhandler;
57
}
58
59
#endif
60
61
#ifdef TEST
62
#include "_PDCLIB_test.h"
63
64
int main( void )
65
{
66
/* Testing covered by raise.c */
67
return TEST_RESULTS;
68
}
69
#endif
70
71