// Check that statically linked binary executes successfully // with RLIMIT_NOFILE resource lowered to zero. Regression // test for issue #96621. // // run-pass // dont-check-compiler-stderr // only-linux // no-prefer-dynamic // compile-flags: -Ctarget-feature=+crt-static -Crpath=no -Crelocation-model=static #![feature(exit_status_error)] #![feature(rustc_private)] extern crate libc; use std::os::unix::process::CommandExt; use std::process::Command; fn main() { let mut args = std::env::args(); let this = args.next().unwrap(); match args.next().as_deref() { None => { let mut cmd = Command::new(this); cmd.arg("Ok!"); unsafe { cmd.pre_exec(|| { let rlim = libc::rlimit { rlim_cur: 0, rlim_max: 0, }; if libc::setrlimit(libc::RLIMIT_NOFILE, &rlim) == -1 { Err(std::io::Error::last_os_error()) } else { Ok(()) } }) }; let output = cmd.output().unwrap(); println!("{:?}", output); output.status.exit_ok().unwrap(); assert!(output.stdout.starts_with(b"Ok!")); } Some(word) => { println!("{}", word); } } }