// 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::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; } }}; }