@@ -27,15 +27,12 @@ namespace LIBC_NAMESPACE {
27
27
// handler taking siginfo_t * argument, one can set sa_handler to sa_sigaction
28
28
// if SA_SIGINFO is set in sa_flags.
29
29
struct KernelSigaction {
30
- using HandlerType = void (int );
31
- using SiginfoHandlerType = void (int , siginfo_t *, void *);
32
-
33
30
LIBC_INLINE KernelSigaction &operator =(const struct sigaction &sa) {
34
31
sa_flags = sa.sa_flags ;
35
32
sa_restorer = sa.sa_restorer ;
36
33
sa_mask = sa.sa_mask ;
37
34
if (sa_flags & SA_SIGINFO) {
38
- sa_handler = reinterpret_cast <HandlerType *>( sa.sa_sigaction ) ;
35
+ sa_sigaction = sa.sa_sigaction ;
39
36
} else {
40
37
sa_handler = sa.sa_handler ;
41
38
}
@@ -48,13 +45,16 @@ struct KernelSigaction {
48
45
sa.sa_mask = sa_mask;
49
46
sa.sa_restorer = sa_restorer;
50
47
if (sa_flags & SA_SIGINFO)
51
- sa.sa_sigaction = reinterpret_cast <SiginfoHandlerType *>(sa_handler) ;
48
+ sa.sa_sigaction = sa_sigaction ;
52
49
else
53
50
sa.sa_handler = sa_handler;
54
51
return sa;
55
52
}
56
53
57
- HandlerType *sa_handler;
54
+ union {
55
+ void (*sa_handler)(int );
56
+ void (*sa_sigaction)(int , siginfo_t *, void *);
57
+ };
58
58
unsigned long sa_flags;
59
59
void (*sa_restorer)(void );
60
60
// Our public definition of sigset_t matches that of the kernel's definition.
0 commit comments