mirror of https://github.com/rust-lang/rust
47 lines
1.4 KiB
Rust
47 lines
1.4 KiB
Rust
// 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);
|
|
}
|
|
}
|
|
}
|