From 43a57e18654aac170e54468ad77ff5a7c8c8b58a Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Sun, 27 Aug 2023 07:41:23 -0700 Subject: [PATCH] Add more types and constants to the signals API. (#14) Expose `Sigaction`, `Signal`, `Sigflags`, and `sig_ign` in the signals APIs. --- src/lib.rs | 2 +- src/signals.rs | 21 +++++++++++++++++++-- src/signals_via_libc.rs | 19 ++++++++++++++++++- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 383f2b2..9a24c8a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -32,7 +32,7 @@ extern crate unwinding; mod arch; pub use program::{at_exit, exit, exit_immediately}; -pub use signals::{sigaction, Sigaction}; +pub use signals::{sig_ign, sigaction, Sigaction, Sigflags, Sighandler, Signal, SA_RESTART}; #[cfg(feature = "set_thread_id")] pub use threads::set_current_thread_id_after_a_fork; #[cfg(feature = "origin-threads")] diff --git a/src/signals.rs b/src/signals.rs index ee9d8c4..8cf1c08 100644 --- a/src/signals.rs +++ b/src/signals.rs @@ -1,5 +1,4 @@ use rustix::io; -use rustix::process::Signal; #[cfg(not(target_arch = "riscv64"))] use { crate::arch, @@ -8,7 +7,16 @@ use { }; /// A signal action record for use with [`sigaction`]. -pub type Sigaction = linux_raw_sys::general::kernel_sigaction; +pub use rustix::runtime::Sigaction; + +/// A signal identifiier for use with [`sigaction`]. +pub use rustix::process::Signal; + +/// A signal handler function for use with [`Sigaction`]. +pub use linux_raw_sys::general::__kernel_sighandler_t as Sighandler; + +/// A flags type for use with [`Sigaction`]. +pub use linux_raw_sys::ctypes::c_ulong as Sigflags; /// Register a signal handler. /// @@ -32,3 +40,12 @@ pub unsafe fn sigaction(sig: Signal, action: Option) -> io::Result Sighandler { + linux_raw_sys::signal_macros::sig_ign() +} + +/// `SA_RESTART` +pub const SA_RESTART: Sigflags = linux_raw_sys::general::SA_RESTART as _; diff --git a/src/signals_via_libc.rs b/src/signals_via_libc.rs index 321a441..b2efa5a 100644 --- a/src/signals_via_libc.rs +++ b/src/signals_via_libc.rs @@ -1,11 +1,19 @@ use core::mem::MaybeUninit; use core::ptr::null; use rustix::io; -use rustix::process::Signal; /// A signal action record for use with [`sigaction`]. pub type Sigaction = libc::sigaction; +/// A signal identifiier for use with [`sigaction`]. +pub use rustix::process::Signal; + +/// A signal handler function for use with [`Sigaction`]. +pub use libc::sighandler_t as Sighandler; + +/// A flags type for use with [`Sigaction`]. +pub use linux_raw_sys::ctypes::c_int as Sigflags; + /// Register a signal handler. /// /// # Safety @@ -26,3 +34,12 @@ pub unsafe fn sigaction(sig: Signal, action: Option) -> io::Result Sighandler { + libc::SIG_IGN +} + +/// `SA_RESTART` +pub const SA_RESTART: Sigflags = libc::SA_RESTART;