This source file includes following definitions.
- handler
- main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <config.h>
20
21 #include <signal.h>
22
23 #include "signature.h"
24 SIGNATURE_CHECK (sigaction, int, (int, struct sigaction const *,
25 struct sigaction *));
26
27 #include <stddef.h>
28
29 #include "macros.h"
30
31 #ifndef SA_NOCLDSTOP
32 # define SA_NOCLDSTOP 0
33 #endif
34 #ifndef SA_ONSTACK
35 # define SA_ONSTACK 0
36 #endif
37 #ifndef SA_RESETHAND
38 # define SA_RESETHAND 0
39 #endif
40 #ifndef SA_RESTART
41 # define SA_RESTART 0
42 #endif
43 #ifndef SA_SIGINFO
44 # define SA_SIGINFO 0
45 #endif
46 #ifndef SA_NOCLDWAIT
47 # define SA_NOCLDWAIT 0
48 #endif
49
50
51
52
53 #define MASK_SA_FLAGS (SA_NOCLDSTOP | SA_ONSTACK | SA_RESETHAND | SA_RESTART \
54 | SA_SIGINFO | SA_NOCLDWAIT | SA_NODEFER)
55
56
57
58
59
60
61
62 static void
63 handler (int sig)
64 {
65 static int entry_count;
66 struct sigaction sa;
67 ASSERT (sig == SIGABRT);
68 ASSERT (sigaction (SIGABRT, NULL, &sa) == 0);
69 ASSERT ((sa.sa_flags & SA_SIGINFO) == 0);
70 switch (entry_count++)
71 {
72 case 0:
73 ASSERT ((sa.sa_flags & SA_RESETHAND) == 0);
74 ASSERT (sa.sa_handler == handler);
75 break;
76 case 1:
77
78
79
80 #if !(defined __GLIBC__ || defined __UCLIBC__)
81 ASSERT (sa.sa_handler == SIG_DFL);
82 #endif
83 break;
84 default:
85 ASSERT (0);
86 }
87 }
88
89 int
90 main (void)
91 {
92 struct sigaction sa;
93 struct sigaction old_sa;
94 sa.sa_handler = handler;
95
96 sa.sa_flags = 0;
97 ASSERT (sigemptyset (&sa.sa_mask) == 0);
98 ASSERT (sigaction (SIGABRT, &sa, NULL) == 0);
99 ASSERT (raise (SIGABRT) == 0);
100
101 sa.sa_flags = SA_RESETHAND | SA_NODEFER;
102 ASSERT (sigaction (SIGABRT, &sa, &old_sa) == 0);
103 ASSERT ((old_sa.sa_flags & MASK_SA_FLAGS) == 0);
104 ASSERT (old_sa.sa_handler == handler);
105 ASSERT (raise (SIGABRT) == 0);
106
107 sa.sa_handler = SIG_DFL;
108 ASSERT (sigaction (SIGABRT, &sa, &old_sa) == 0);
109 ASSERT ((old_sa.sa_flags & SA_SIGINFO) == 0);
110 #if !(defined __GLIBC__ || defined __UCLIBC__)
111 ASSERT (old_sa.sa_handler == SIG_DFL);
112 #endif
113
114 sa.sa_handler = SIG_IGN;
115 ASSERT (sigaction (SIGABRT, &sa, NULL) == 0);
116 ASSERT (raise (SIGABRT) == 0);
117 ASSERT (sigaction (SIGABRT, NULL, &old_sa) == 0);
118 ASSERT (old_sa.sa_handler == SIG_IGN);
119 ASSERT (raise (SIGABRT) == 0);
120
121 return 0;
122 }