File tree Expand file tree Collapse file tree 1 file changed +16
-2
lines changed Expand file tree Collapse file tree 1 file changed +16
-2
lines changed Original file line number Diff line number Diff line change @@ -378,16 +378,30 @@ impl AsRef<sigset_t> for SigSet {
378
378
}
379
379
}
380
380
381
+ pub use self :: signal:: siginfo;
382
+
383
+ pub enum SigHandler {
384
+ SigDfl ,
385
+ SigIgn ,
386
+ Handler ( extern fn ( SigNum ) ) ,
387
+ SigAction ( extern fn ( SigNum , * mut siginfo , * mut libc:: c_void ) )
388
+ }
389
+
381
390
type sigaction_t = self :: signal:: sigaction ;
382
391
383
392
pub struct SigAction {
384
393
sigaction : sigaction_t
385
394
}
386
395
387
396
impl SigAction {
388
- pub fn new ( handler : extern fn ( libc :: c_int ) , flags : SockFlag , mask : SigSet ) -> SigAction {
397
+ pub fn new ( handler : SigHandler , flags : SockFlag , mask : SigSet ) -> SigAction {
389
398
let mut s = unsafe { mem:: uninitialized :: < sigaction_t > ( ) } ;
390
- s. sa_handler = handler;
399
+ s. sa_handler = match handler {
400
+ SigHandler :: SigDfl => unsafe { mem:: transmute ( libc:: SIG_DFL ) } ,
401
+ SigHandler :: SigIgn => unsafe { mem:: transmute ( libc:: SIG_IGN ) } ,
402
+ SigHandler :: Handler ( f) => f,
403
+ SigHandler :: SigAction ( f) => unsafe { mem:: transmute ( f) } ,
404
+ } ;
391
405
s. sa_flags = flags;
392
406
s. sa_mask = mask. sigset ;
393
407
You can’t perform that action at this time.
0 commit comments