#![feature(rustc_private)] extern crate libc; /// So tests don't have to bring libc in scope themselves pub enum SignalHandler { Ignore, Default, } /// Helper to assert that [`libc::SIGPIPE`] has the expected signal handler. pub fn assert_sigpipe_handler(expected_handler: SignalHandler) { #[cfg(unix)] #[cfg(not(any( target_os = "emscripten", target_os = "fuchsia", target_os = "horizon", target_os = "android", )))] { let actual = unsafe { let mut actual: libc::sigaction = std::mem::zeroed(); libc::sigaction(libc::SIGPIPE, std::ptr::null(), &mut actual); actual.sa_sigaction }; let expected = match expected_handler { SignalHandler::Ignore => libc::SIG_IGN, SignalHandler::Default => libc::SIG_DFL, }; assert_eq!(actual, expected, "actual and expected SIGPIPE disposition differs"); } }