mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			34 lines
		
	
	
		
			948 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			948 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![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);
 | |
|         };
 | |
|     }
 | |
| }
 | 
