pub(super) use crate::signal::*;
use std::num::NonZero;
pub const SIGABRT: Number = Number::from_raw_unchecked(NonZero::new(6).unwrap());
pub const SIGALRM: Number = Number::from_raw_unchecked(NonZero::new(14).unwrap());
pub const SIGBUS: Number = Number::from_raw_unchecked(NonZero::new(101).unwrap());
pub const SIGCHLD: Number = Number::from_raw_unchecked(NonZero::new(102).unwrap());
pub const SIGCLD: Number = SIGCHLD;
pub const SIGCONT: Number = Number::from_raw_unchecked(NonZero::new(103).unwrap());
pub const SIGEMT: Number = Number::from_raw_unchecked(NonZero::new(104).unwrap());
pub const SIGFPE: Number = Number::from_raw_unchecked(NonZero::new(105).unwrap());
pub const SIGHUP: Number = Number::from_raw_unchecked(NonZero::new(1).unwrap());
pub const SIGILL: Number = Number::from_raw_unchecked(NonZero::new(106).unwrap());
pub const SIGINFO: Number = Number::from_raw_unchecked(NonZero::new(107).unwrap());
pub const SIGINT: Number = Number::from_raw_unchecked(NonZero::new(2).unwrap());
pub const SIGIO: Number = Number::from_raw_unchecked(NonZero::new(108).unwrap());
pub const SIGIOT: Number = SIGABRT;
pub const SIGKILL: Number = Number::from_raw_unchecked(NonZero::new(9).unwrap());
pub const SIGLOST: Number = Number::from_raw_unchecked(NonZero::new(109).unwrap());
pub const SIGPIPE: Number = Number::from_raw_unchecked(NonZero::new(110).unwrap());
pub const SIGPOLL: Number = Number::from_raw_unchecked(NonZero::new(111).unwrap());
pub const SIGPROF: Number = Number::from_raw_unchecked(NonZero::new(112).unwrap());
pub const SIGPWR: Number = Number::from_raw_unchecked(NonZero::new(113).unwrap());
pub const SIGQUIT: Number = Number::from_raw_unchecked(NonZero::new(3).unwrap());
pub const SIGSEGV: Number = Number::from_raw_unchecked(NonZero::new(114).unwrap());
pub const SIGSTKFLT: Number = Number::from_raw_unchecked(NonZero::new(115).unwrap());
pub const SIGSTOP: Number = Number::from_raw_unchecked(NonZero::new(116).unwrap());
pub const SIGSYS: Number = Number::from_raw_unchecked(NonZero::new(117).unwrap());
pub const SIGTERM: Number = Number::from_raw_unchecked(NonZero::new(15).unwrap());
pub const SIGTHR: Number = Number::from_raw_unchecked(NonZero::new(118).unwrap());
pub const SIGTRAP: Number = Number::from_raw_unchecked(NonZero::new(119).unwrap());
pub const SIGTSTP: Number = Number::from_raw_unchecked(NonZero::new(120).unwrap());
pub const SIGTTIN: Number = Number::from_raw_unchecked(NonZero::new(121).unwrap());
pub const SIGTTOU: Number = Number::from_raw_unchecked(NonZero::new(122).unwrap());
pub const SIGURG: Number = Number::from_raw_unchecked(NonZero::new(123).unwrap());
pub const SIGUSR1: Number = Number::from_raw_unchecked(NonZero::new(124).unwrap());
pub const SIGUSR2: Number = Number::from_raw_unchecked(NonZero::new(125).unwrap());
pub const SIGVTALRM: Number = Number::from_raw_unchecked(NonZero::new(126).unwrap());
pub const SIGWINCH: Number = Number::from_raw_unchecked(NonZero::new(127).unwrap());
pub const SIGXCPU: Number = Number::from_raw_unchecked(NonZero::new(128).unwrap());
pub const SIGXFSZ: Number = Number::from_raw_unchecked(NonZero::new(129).unwrap());
pub const SIGRTMIN: Number = Number::from_raw_unchecked(NonZero::new(201).unwrap());
pub const SIGRTMAX: Number = Number::from_raw_unchecked(NonZero::new(209).unwrap());
pub const RT_RANGE: std::ops::RangeInclusive<RawNumber> = SIGRTMIN.as_raw()..=SIGRTMAX.as_raw();
impl Name {
pub(super) fn try_from_raw_virtual(number: RawNumber) -> Option<Self> {
match () {
() if number == SIGABRT.as_raw() => Some(Self::Abrt),
() if number == SIGALRM.as_raw() => Some(Self::Alrm),
() if number == SIGBUS.as_raw() => Some(Self::Bus),
() if number == SIGCHLD.as_raw() => Some(Self::Chld),
() if number == SIGCLD.as_raw() => Some(Self::Cld),
() if number == SIGCONT.as_raw() => Some(Self::Cont),
() if number == SIGEMT.as_raw() => Some(Self::Emt),
() if number == SIGFPE.as_raw() => Some(Self::Fpe),
() if number == SIGHUP.as_raw() => Some(Self::Hup),
() if number == SIGILL.as_raw() => Some(Self::Ill),
() if number == SIGINFO.as_raw() => Some(Self::Info),
() if number == SIGINT.as_raw() => Some(Self::Int),
() if number == SIGIO.as_raw() => Some(Self::Io),
() if number == SIGIOT.as_raw() => Some(Self::Iot),
() if number == SIGKILL.as_raw() => Some(Self::Kill),
() if number == SIGLOST.as_raw() => Some(Self::Lost),
() if number == SIGPIPE.as_raw() => Some(Self::Pipe),
() if number == SIGPOLL.as_raw() => Some(Self::Poll),
() if number == SIGPROF.as_raw() => Some(Self::Prof),
() if number == SIGPWR.as_raw() => Some(Self::Pwr),
() if number == SIGQUIT.as_raw() => Some(Self::Quit),
() if number == SIGSEGV.as_raw() => Some(Self::Segv),
() if number == SIGSTKFLT.as_raw() => Some(Self::Stkflt),
() if number == SIGSTOP.as_raw() => Some(Self::Stop),
() if number == SIGSYS.as_raw() => Some(Self::Sys),
() if number == SIGTERM.as_raw() => Some(Self::Term),
() if number == SIGTHR.as_raw() => Some(Self::Thr),
() if number == SIGTRAP.as_raw() => Some(Self::Trap),
() if number == SIGTSTP.as_raw() => Some(Self::Tstp),
() if number == SIGTTIN.as_raw() => Some(Self::Ttin),
() if number == SIGTTOU.as_raw() => Some(Self::Ttou),
() if number == SIGURG.as_raw() => Some(Self::Urg),
() if number == SIGUSR1.as_raw() => Some(Self::Usr1),
() if number == SIGUSR2.as_raw() => Some(Self::Usr2),
() if number == SIGVTALRM.as_raw() => Some(Self::Vtalrm),
() if number == SIGWINCH.as_raw() => Some(Self::Winch),
() if number == SIGXCPU.as_raw() => Some(Self::Xcpu),
() if number == SIGXFSZ.as_raw() => Some(Self::Xfsz),
() if RT_RANGE.contains(&number) => {
let incr = number - SIGRTMIN.as_raw();
debug_assert!(incr >= 0);
let decr = number - SIGRTMAX.as_raw();
debug_assert!(decr <= 0);
debug_assert!(decr > RawNumber::MIN);
if incr <= -decr {
Some(Self::Rtmin(incr))
} else {
Some(Self::Rtmax(decr))
}
}
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum SignalEffect {
None,
Terminate { core_dump: bool },
Suspend,
Resume,
}
impl SignalEffect {
#[must_use]
pub const fn of(signal: Name) -> Self {
match signal {
Name::Abrt => Self::Terminate { core_dump: true },
Name::Alrm => Self::Terminate { core_dump: false },
Name::Bus => Self::Terminate { core_dump: true },
Name::Chld | Name::Cld => Self::None,
Name::Cont => Self::Resume,
Name::Emt => Self::Terminate { core_dump: false },
Name::Fpe => Self::Terminate { core_dump: true },
Name::Hup => Self::Terminate { core_dump: false },
Name::Ill => Self::Terminate { core_dump: true },
Name::Info => Self::Terminate { core_dump: false },
Name::Int => Self::Terminate { core_dump: false },
Name::Io => Self::Terminate { core_dump: false },
Name::Iot => Self::Terminate { core_dump: true },
Name::Kill => Self::Terminate { core_dump: false },
Name::Lost => Self::Terminate { core_dump: false },
Name::Pipe => Self::Terminate { core_dump: false },
Name::Poll => Self::Terminate { core_dump: false },
Name::Prof => Self::Terminate { core_dump: false },
Name::Pwr => Self::Terminate { core_dump: false },
Name::Quit => Self::Terminate { core_dump: true },
Name::Segv => Self::Terminate { core_dump: true },
Name::Stkflt => Self::Terminate { core_dump: false },
Name::Stop => Self::Suspend,
Name::Sys => Self::Terminate { core_dump: true },
Name::Term => Self::Terminate { core_dump: false },
Name::Thr => Self::Terminate { core_dump: false },
Name::Trap => Self::Terminate { core_dump: true },
Name::Tstp | Name::Ttin | Name::Ttou => Self::Suspend,
Name::Urg => Self::None,
Name::Usr1 | Name::Usr2 => Self::Terminate { core_dump: false },
Name::Vtalrm => Self::Terminate { core_dump: false },
Name::Winch => Self::None,
Name::Xcpu => Self::Terminate { core_dump: true },
Name::Xfsz => Self::Terminate { core_dump: true },
Name::Rtmin(_) | Name::Rtmax(_) => Self::Terminate { core_dump: false },
}
}
}