summaryrefslogtreecommitdiff
path: root/src/signal/__signal_handler.c
blob: 7bd6718ab8055f699d247032c946cd8a9430c650 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stddef.h>
#include "_signal.h"
#include "stdlib/_stdlib.h"
#include "_safety.h"

void __signal_handler(int sig)
{
	if (__stdlib_h.exit_called == QUICK) {
		UNDEFINED("signal %d occured during quick_exit", sig);
	}

	__signal_h.current = sig;
	if (__signal_h.handlers[sig] != NULL) {
		__signal_h.handlers[sig](sig);
	}

	/* TODO: signal number to name */
	if (sig == SIGFPE || sig == SIGILL || sig == SIGSEGV) {
		__signal_h.current = 0;
		UNDEFINED("Signal handler for signal %d returned", sig);
	}

	__signal_h.current = 0;
}

/*
STDC(0)
SIGNAL_SAFE(0)
*/