Skip to content

Commit 9938df6

Browse files
committed
Account for the different signal handler types.
1 parent 645c48f commit 9938df6

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

src/sys/signal.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -378,16 +378,30 @@ impl AsRef<sigset_t> for SigSet {
378378
}
379379
}
380380

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+
381390
type sigaction_t = self::signal::sigaction;
382391

383392
pub struct SigAction {
384393
sigaction: sigaction_t
385394
}
386395

387396
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 {
389398
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+
};
391405
s.sa_flags = flags;
392406
s.sa_mask = mask.sigset;
393407

0 commit comments

Comments
 (0)