use libc;
use std::io;
pub fn activate() -> Result<(), libc::c_int> {
let rlimit = libc::rlimit {
rlim_cur: 0,
rlim_max: 0,
};
let result = unsafe {
libc::setrlimit(libc::RLIMIT_FSIZE, &rlimit)
};
if result != 0 {
return Err(result)
}
unsafe {
libc::umask(0);
}
let result = unsafe {
libc::prctl(libc::PR_SET_DUMPABLE, 0, 0, 0, 0)
};
if result != 0 {
return Err(result)
}
unsafe {
if libc::setsid() < 0 {
let result = io::Error::last_os_error().raw_os_error().unwrap() as i32;
if result != libc::EPERM {
return Err(result)
}
}
}
let result = unsafe {
libc::clearenv()
};
if result == 0 {
Ok(())
} else {
Err(result)
}
}