@@ -1744,24 +1744,21 @@ pub fn sigprocmask(flags: u32, noalias set: ?*const sigset_t, noalias oldset: ?*
1744
1744
return syscall4 (.rt_sigprocmask , flags , @intFromPtr (set ), @intFromPtr (oldset ), NSIG / 8 );
1745
1745
}
1746
1746
1747
- pub fn sigaction (sig : u6 , noalias act : ? * const Sigaction , noalias oact : ? * Sigaction ) usize {
1748
- assert (sig >= 1 );
1749
- assert (sig != SIG .KILL );
1750
- assert (sig != SIG .STOP );
1751
-
1747
+ pub fn sigaction (sig : u8 , noalias act : ? * const Sigaction , noalias oact : ? * Sigaction ) usize {
1752
1748
var ksa : k_sigaction = undefined ;
1753
1749
var oldksa : k_sigaction = undefined ;
1754
1750
const mask_size = @sizeOf (@TypeOf (ksa .mask ));
1755
1751
1756
1752
if (act ) | new | {
1757
- const restorer_fn = if ((new .flags & SA .SIGINFO ) != 0 ) & restore_rt else & restore ;
1758
- ksa = k_sigaction {
1759
- .handler = new .handler .handler ,
1760
- .flags = new .flags | SA .RESTORER ,
1761
- .mask = undefined ,
1762
- .restorer = @ptrCast (restorer_fn ),
1763
- };
1764
- @memcpy (@as ([* ]u8 , @ptrCast (& ksa .mask ))[0.. mask_size ], @as ([* ]const u8 , @ptrCast (& new .mask )));
1753
+ ksa .handler = new .handler .handler ;
1754
+ if (ksa .handler == SIG .DFL or ksa .handler == SIG .IGN ) {
1755
+ ksa .flags = new .flags ;
1756
+ } else {
1757
+ const restorer_fn = if ((new .flags & SA .SIGINFO ) != 0 ) & restore_rt else & restore ;
1758
+ ksa .flags = new .flags | SA .RESTORER ;
1759
+ ksa .restorer = @ptrCast (restorer_fn );
1760
+ @memcpy (@as ([* ]u8 , @ptrCast (& ksa .mask ))[0.. mask_size ], @as ([* ]const u8 , @ptrCast (& new .mask )));
1761
+ }
1765
1762
}
1766
1763
1767
1764
const ksa_arg = if (act != null ) @intFromPtr (& ksa ) else 0 ;
0 commit comments