diff --git a/include/bits/signal.h b/include/bits/signal.h index 8812ba7932e2425c02f4bb79d8b654e90e6a74fb..d3645d9b039601d894e77a98771fae712fa06cc0 100644 --- a/include/bits/signal.h +++ b/include/bits/signal.h @@ -1,6 +1,3 @@ -#define SIG_ERR -1ULL - -#define NSIG 64 - -// darn cbindgen -typedef unsigned long sigset_t[NSIG / (8 * sizeof(unsigned long))]; +#define SIG_ERR ((void (*)(int)) -1) +#define SIG_DFL ((void (*)(int)) 0) +#define SIG_IGN ((void (*)(int)) 1) diff --git a/src/platform/src/redox/mod.rs b/src/platform/src/redox/mod.rs index 10c3fc6532d56e8cae493744f77c2dffc0bcb1ca..3619d499ead37721170ef9049f84af7232eb45e7 100644 --- a/src/platform/src/redox/mod.rs +++ b/src/platform/src/redox/mod.rs @@ -736,7 +736,7 @@ pub unsafe fn sigaction(sig: c_int, act: *const sigaction, oact: *mut sigaction) let m = (*act).sa_mask; Some(syscall::SigAction { sa_handler: sig_handler, - sa_mask: [m[0] as u64, 0], + sa_mask: [0, m as u64], sa_flags: (*act).sa_flags as usize }) }; @@ -748,7 +748,7 @@ pub unsafe fn sigaction(sig: c_int, act: *const sigaction, oact: *mut sigaction) )) as c_int; if !oact.is_null() { let m = old.sa_mask; - (*oact).sa_mask = [m[0] as c_ulong]; + (*oact).sa_mask = m[1] as c_ulong; (*oact).sa_flags = old.sa_flags as c_ulong; } ret diff --git a/src/platform/src/types.rs b/src/platform/src/types.rs index 0a03d28a477ee514e17370659a299fe8e6ea0b0a..8438ddf10c9356ad5e0075226de13ec41390715c 100644 --- a/src/platform/src/types.rs +++ b/src/platform/src/types.rs @@ -172,8 +172,7 @@ pub struct sigaction { pub sa_mask: sigset_t } -pub const NSIG: usize = 64; -pub type sigset_t = [c_ulong; NSIG / (8 * mem::size_of::<c_ulong>())]; +pub type sigset_t = c_ulong; const UTSLENGTH: usize = 65; diff --git a/src/signal/src/lib.rs b/src/signal/src/lib.rs index 8ca3b7f07a6f7816fe69fb65a2f15012ccedada3..099ce1149ce5ab25b6d53240b26c15266d659076 100644 --- a/src/signal/src/lib.rs +++ b/src/signal/src/lib.rs @@ -14,6 +14,11 @@ pub mod sys; #[path = "redox.rs"] pub mod sys; +pub use sys::*; + +use core::{mem, ptr}; +use platform::types::*; + const SIG_ERR: usize = !0; pub const SIG_BLOCK: c_int = 0; @@ -30,10 +35,8 @@ pub struct sigaction { pub sa_mask: sigset_t } -pub use sys::*; - -use core::{mem, ptr}; -use platform::types::*; +pub const NSIG: usize = 64; +pub type sigset_t = c_ulong; #[no_mangle] pub extern "C" fn kill(pid: pid_t, sig: c_int) -> c_int { @@ -73,9 +76,9 @@ pub extern "C" fn sigaddset(set: *mut sigset_t, mut signo: c_int) -> c_int { } let signo = signo as usize - 1; // 0-indexed usize, please! - - let bits_each = 8 * mem::size_of::<sigset_t>(); - (unsafe { *set })[signo / bits_each] = 1 << (signo & (bits_each - 1)); + unsafe { + *set |= 1 << (signo & (8 * mem::size_of::<sigset_t>() - 1)); + } 0 } @@ -86,16 +89,16 @@ pub extern "C" fn sigdelset(set: *mut sigset_t, signo: c_int) -> c_int { #[no_mangle] pub extern "C" fn sigemptyset(set: *mut sigset_t) -> c_int { - for i in unsafe { &mut (*set) } { - *i = 0; + unsafe { + *set = 0; } 0 } #[no_mangle] pub extern "C" fn sigfillset(set: *mut sigset_t) -> c_int { - for i in unsafe { &mut (*set) } { - *i = c_ulong::max_value(); + unsafe { + *set = c_ulong::max_value(); } 0 } diff --git a/src/sys_socket/cbindgen.toml b/src/sys_socket/cbindgen.toml index fc968ead013d2be8ce589680553bb382e82309a9..dee4af3bed10dcd2b2d9035c1fd6e2b709450d66 100644 --- a/src/sys_socket/cbindgen.toml +++ b/src/sys_socket/cbindgen.toml @@ -1,4 +1,4 @@ -sys_includes = ["sys/types.h"] +sys_includes = ["stddef.h", "sys/types.h"] include_guard = "_SYS_SOCKET_H" style = "Tag" language = "C"