| #![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 prev = unsafe { libc::signal(libc::SIGPIPE, libc::SIG_IGN) }; |
| |
| let expected = match expected_handler { |
| SignalHandler::Ignore => libc::SIG_IGN, |
| SignalHandler::Default => libc::SIG_DFL, |
| }; |
| assert_eq!(prev, expected, "expected sigpipe value matches actual value"); |
| |
| // Unlikely to matter, but restore the old value anyway |
| unsafe { |
| libc::signal(libc::SIGPIPE, prev); |
| }; |
| } |
| } |