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