Skip to main content

relibc/platform/pal/
signal.rs

1use super::super::{
2    Pal,
3    types::{c_int, pid_t},
4};
5#[allow(deprecated)]
6use crate::header::sys_time::itimerval;
7use crate::{
8    error::{Errno, Result},
9    header::{
10        bits_sigset_t::sigset_t,
11        signal::{sigaction, siginfo_t, sigval, stack_t},
12        time::timespec,
13    },
14};
15
16/// Platform abstraction of signal-related functionality.
17pub trait PalSignal: Pal {
18    /// Platform implementation of [`getitimer()`](crate::header::sys_time::getitimer) from [`sys/time.h`](crate::header::sys_time).
19    #[allow(deprecated)]
20    fn getitimer(which: c_int, out: &mut itimerval) -> Result<()>;
21
22    /// Platform implementation of [`kill()`](crate::header::signal::kill) from [`signal.h`](crate::header::signal).
23    fn kill(pid: pid_t, sig: c_int) -> Result<()>;
24
25    /// Platform implementation of [`sigqueue()`](crate::header::signal::sigqueue) from [`signal.h`](crate::header::signal).
26    fn sigqueue(pid: pid_t, sig: c_int, val: sigval) -> Result<()>;
27
28    /// Platform implementation of [`killpg()`](crate::header::signal::killpg) from [`signal.h`](crate::header::signal).
29    fn killpg(pgrp: pid_t, sig: c_int) -> Result<()>;
30
31    /// Platform implementation of [`raise()`](crate::header::signal::raise) from [`signal.h`](crate::header::signal).
32    fn raise(sig: c_int) -> Result<()>;
33
34    /// Platform implementation of [`setitimer()`](crate::header::sys_time::setitimer) from [`sys/time.h`](crate::header::sys_time).
35    #[allow(deprecated)]
36    fn setitimer(which: c_int, new: &itimerval, old: Option<&mut itimerval>) -> Result<()>;
37
38    /// Platform implementation of [`sigaction()`](crate::header::signal::sigaction()) from [`signal.h`](crate::header::signal).
39    fn sigaction(sig: c_int, act: Option<&sigaction>, oact: Option<&mut sigaction>) -> Result<()>;
40
41    /// Platform implementation of [`sigaltstack()`](crate::header::signal::sigaltstack()) from [`signal.h`](crate::header::signal).
42    unsafe fn sigaltstack(ss: Option<&stack_t>, old_ss: Option<&mut stack_t>) -> Result<()>;
43
44    /// Platform implementation of [`sigpending()`](crate::header::signal::sigpending) from [`signal.h`](crate::header::signal).
45    fn sigpending(set: &mut sigset_t) -> Result<()>;
46
47    /// Platform implementation of [`sigprocmask()`](crate::header::signal::sigprocmask) from [`signal.h`](crate::header::signal).
48    fn sigprocmask(how: c_int, set: Option<&sigset_t>, oset: Option<&mut sigset_t>) -> Result<()>;
49
50    /// Platform implementation of [`sigsuspend()`](crate::header::signal::sigsuspend) from [`signal.h`](crate::header::signal).
51    fn sigsuspend(mask: &sigset_t) -> Errno; // always fails
52
53    /// Platform implementation of [`sigtimedwait()`](crate::header::signal::sigtimedwait) from [`signal.h`](crate::header::signal).
54    fn sigtimedwait(
55        set: &sigset_t,
56        sig: Option<&mut siginfo_t>,
57        tp: Option<&timespec>,
58    ) -> Result<c_int>;
59}