xref: /relibc/tests/sigaction.c (revision 3a923aa62d168d05c45d02c8e53804d7fdfe7f05)
1 #include <signal.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5 #include <errno.h>
6 
7 #include "test_helpers.h"
8 
9 void handler1(int sig) {
10     ERROR_IF(handler, sig, != SIGUSR1);
11     puts("Signal handler1 called!");
12 }
13 
14 void handler2(int sig) {
15     ERROR_IF(handler, sig, != SIGUSR1);
16     puts("Signal handler2 called!");
17 }
18 
19 int main(void) {
20 	struct sigaction sa1 = { .sa_handler = handler1 };
21     struct sigaction sa2 = { .sa_handler = handler2 };
22     struct sigaction saold = {0};
23 
24 	sigemptyset(&sa1.sa_mask);
25     sigemptyset(&sa2.sa_mask);
26 
27     int rcode = sigaction(SIGUSR1, &sa1, NULL);
28     ERROR_IF(signal, rcode, != 0);
29 
30     puts("Raising...");
31 
32     int raise_status = raise(SIGUSR1);
33     ERROR_IF(raise, raise_status, < 0);
34 
35 	rcode = sigaction(SIGUSR1, &sa2, &saold);
36     ERROR_IF(signal, rcode, != 0);
37     ERROR_IF(signal, saold.sa_handler, != sa1.sa_handler);
38 
39     puts("Raising...");
40 
41     raise_status = raise(SIGUSR1);
42     ERROR_IF(raise, raise_status, < 0);
43 
44     puts("Raised.");
45 }
46