Skip to content

Commit 4cd38ff

Browse files
Merge pull request #1 from ravi0213/macos-fix
fix compilation issue on macOS
2 parents d33fe43 + 58938e0 commit 4cd38ff

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

src/signal.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ pub fn signal(signum: int, sig_handler: fn(int), flags: Option<int>) {
1111
signal_internal(signum, int_sig_handler, flags)
1212
}
1313

14+
#[cfg(target_os = "linux")]
1415
fn signal_internal(signum: int, sig_handler: libc::size_t, flags: Option<int>) {
1516
let mut sigset: libc::sigset_t = unsafe { uninitialized() };
1617
let _ = unsafe { libc::sigemptyset(&mut sigset as *mut libc::sigset_t) };
@@ -26,6 +27,21 @@ fn signal_internal(signum: int, sig_handler: libc::size_t, flags: Option<int>) {
2627
unsafe { libc::sigaction(signum, &siga as *const libc::sigaction, &mut oldact as *mut libc::sigaction) };
2728
}
2829

30+
#[cfg(target_os = "macos")]
31+
fn signal_internal(signum: int, sig_handler: libc::size_t, flags: Option<int>) {
32+
let mut sigset: libc::sigset_t = unsafe { uninitialized() };
33+
let _ = unsafe { libc::sigemptyset(&mut sigset as *mut libc::sigset_t) };
34+
35+
let mut siga = unsafe { uninitialized::<libc::sigaction>() };
36+
let mut oldact = unsafe { uninitialized::<libc::sigaction>() };
37+
38+
siga.sa_sigaction = sig_handler;
39+
siga.sa_mask = sigset;
40+
siga.sa_flags = flags.map(|x| { x - libc::SA_SIGINFO }).unwrap_or(libc::SA_ONSTACK | libc::SA_RESTART);
41+
42+
unsafe { libc::sigaction(signum, &siga as *const libc::sigaction, &mut oldact as *mut libc::sigaction) };
43+
}
44+
2945
pub fn default(signum: int) {
3046
let int_sig_handler: libc::size_t = unsafe { transmute(libc::SIG_DFL) };
3147
signal_internal(signum, int_sig_handler, None)

0 commit comments

Comments
 (0)