blob: eba86b2cd002d0e3d89c4f940e942f48fc30723b [file] [log] [blame]
// Take a look at the license at the top of the repository in the LICENSE file.
#[cfg(feature = "debug")]
#[doc(hidden)]
#[allow(unused)]
macro_rules! sysinfo_debug {
($($x:tt)*) => {{
eprintln!($($x)*);
}}
}
#[cfg(not(feature = "debug"))]
#[doc(hidden)]
#[allow(unused)]
macro_rules! sysinfo_debug {
($($x:tt)*) => {{}};
}
macro_rules! declare_signals {
($kind:ty, _ => None,) => (
use crate::Signal;
pub(crate) const fn supported_signals() -> &'static [Signal] {
&[]
}
);
($kind:ty, $(Signal::$signal:ident => $map:expr,)+ _ => None,) => (
use crate::Signal;
pub(crate) const fn supported_signals() -> &'static [Signal] {
&[$(Signal::$signal,)*]
}
#[inline]
pub(crate) fn convert_signal(s: Signal) -> Option<$kind> {
match s {
$(Signal::$signal => Some($map),)*
_ => None,
}
}
);
($kind:ty, $(Signal::$signal:ident => $map:expr,)+) => (
use crate::Signal;
pub(crate) const fn supported_signals() -> &'static [Signal] {
&[$(Signal::$signal,)*]
}
#[inline]
pub(crate) fn convert_signal(s: Signal) -> Option<$kind> {
match s {
$(Signal::$signal => Some($map),)*
}
}
)
}
#[cfg(all(unix, not(feature = "unknown-ci")))]
macro_rules! retry_eintr {
(set_to_0 => $($t:tt)+) => {{
let errno = crate::unix::libc_errno();
if !errno.is_null() {
*errno = 0;
}
retry_eintr!($($t)+)
}};
($errno_value:ident => $($t:tt)+) => {{
loop {
let ret = $($t)+;
if ret < 0 {
let tmp = std::io::Error::last_os_error();
if tmp.kind() == std::io::ErrorKind::Interrupted {
continue;
}
$errno_value = tmp.raw_os_error().unwrap_or(0);
}
break ret;
}
}};
($($t:tt)+) => {{
loop {
let ret = $($t)+;
if ret < 0 && std::io::Error::last_os_error().kind() == std::io::ErrorKind::Interrupted {
continue;
}
break ret;
}
}};
}