From 4b3d1aa5ca6a208def5367b11d9059f9b7564108 Mon Sep 17 00:00:00 2001 From: auronandace Date: Thu, 19 Feb 2026 09:46:56 +0000 Subject: [PATCH 1/2] change sa_flags in sigaction to int to match spec --- include/bits/signal.h | 2 +- src/header/signal/mod.rs | 11 +++++------ src/platform/linux/signal.rs | 2 +- src/platform/redox/signal.rs | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/include/bits/signal.h b/include/bits/signal.h index 2a78547e46..6ce7a3480e 100644 --- a/include/bits/signal.h +++ b/include/bits/signal.h @@ -16,7 +16,7 @@ struct sigaction { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t *, void *); }; - unsigned long sa_flags; + int sa_flags; void (*sa_restorer)(void); sigset_t sa_mask; }; diff --git a/src/header/signal/mod.rs b/src/header/signal/mod.rs index 3f73906225..90a4894cfb 100644 --- a/src/header/signal/mod.rs +++ b/src/header/signal/mod.rs @@ -12,8 +12,7 @@ use crate::{ platform::{ self, ERRNO, Pal, PalSignal, Sys, types::{ - c_char, c_int, c_ulong, c_ulonglong, c_void, pid_t, pthread_attr_t, pthread_t, size_t, - uid_t, + c_char, c_int, c_ulonglong, c_void, pid_t, pthread_attr_t, pthread_t, size_t, uid_t, }, }, }; @@ -54,7 +53,7 @@ pub const SIGEV_THREAD: c_int = 2; /// cbindgen:ignore pub struct sigaction { pub sa_handler: Option, - pub sa_flags: c_ulong, + pub sa_flags: c_int, pub sa_restorer: Option, pub sa_mask: sigset_t, } @@ -316,9 +315,9 @@ pub extern "C" fn siginterrupt(sig: c_int, flag: c_int) -> c_int { unsafe { sigaction(sig, ptr::null_mut(), psa.as_mut_ptr()) }; let mut sa = unsafe { psa.assume_init() }; if flag != 0 { - sa.sa_flags &= !SA_RESTART as c_ulong; + sa.sa_flags &= !SA_RESTART as c_int; } else { - sa.sa_flags |= SA_RESTART as c_ulong; + sa.sa_flags |= SA_RESTART as c_int; } unsafe { sigaction(sig, &mut sa, ptr::null_mut()) } @@ -472,7 +471,7 @@ pub unsafe extern "C" fn sigset( } else { let mut sa = sigaction { sa_handler: func, - sa_flags: 0 as c_ulong, + sa_flags: c_int::from(0), sa_restorer: None, // set by platform if applicable sa_mask: sigset_t::default(), }; diff --git a/src/platform/linux/signal.rs b/src/platform/linux/signal.rs index 2034aac627..570dd3f1cc 100644 --- a/src/platform/linux/signal.rs +++ b/src/platform/linux/signal.rs @@ -73,7 +73,7 @@ impl PalSignal for Sys { } let act = act.map(|act| { let mut act_clone = act.clone(); - act_clone.sa_flags |= SA_RESTORER as c_ulong; + act_clone.sa_flags |= SA_RESTORER as c_int; act_clone.sa_restorer = Some(__restore_rt); act_clone }); diff --git a/src/platform/redox/signal.rs b/src/platform/redox/signal.rs index 239624ca9e..95d29e3ac1 100644 --- a/src/platform/redox/signal.rs +++ b/src/platform/redox/signal.rs @@ -111,7 +111,7 @@ impl PalSignal for Sys { SigactionKind::Ignore } else { SigactionKind::Handled { - handler: if c_act.sa_flags & crate::header::signal::SA_SIGINFO as c_ulong != 0 { + handler: if c_act.sa_flags & crate::header::signal::SA_SIGINFO as c_int != 0 { SignalHandler { sigaction: unsafe { core::mem::transmute(c_act.sa_handler) }, } From 92503ed298501435afcbb3a147ee8b53a4945173 Mon Sep 17 00:00:00 2001 From: auronandace Date: Thu, 19 Feb 2026 09:56:13 +0000 Subject: [PATCH 2/2] missed redox specific fix --- src/platform/redox/signal.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/redox/signal.rs b/src/platform/redox/signal.rs index 95d29e3ac1..f3c755e538 100644 --- a/src/platform/redox/signal.rs +++ b/src/platform/redox/signal.rs @@ -154,7 +154,7 @@ impl PalSignal for Sys { unsafe { handler.handler } }, sa_restorer: None, - sa_flags: old_action.flags.bits().into(), + sa_flags: old_action.flags.bits() as c_int, sa_mask: old_action.mask, }, };