use anyhow::{Context, Result};
use oci_spec::runtime::{LinuxRlimit, LinuxRlimitType};
use rlimit::Resource;
pub fn set_rlimit(rlimit: &LinuxRlimit) -> Result<()> {
let resource = linux_rlimit_type_to_resource(&rlimit.typ());
rlimit::setrlimit(resource, rlimit.soft(), rlimit.hard()).context(format!(
"failed to set resource limit for {}",
resource.as_name()
))?;
Ok(())
}
fn linux_rlimit_type_to_resource(rlimit: &LinuxRlimitType) -> Resource {
match rlimit {
LinuxRlimitType::RlimitCpu => Resource::CPU,
LinuxRlimitType::RlimitFsize => Resource::FSIZE,
LinuxRlimitType::RlimitData => Resource::DATA,
LinuxRlimitType::RlimitStack => Resource::STACK,
LinuxRlimitType::RlimitCore => Resource::CORE,
LinuxRlimitType::RlimitRss => Resource::RSS,
LinuxRlimitType::RlimitNproc => Resource::NPROC,
LinuxRlimitType::RlimitNofile => Resource::NOFILE,
LinuxRlimitType::RlimitMemlock => Resource::MEMLOCK,
LinuxRlimitType::RlimitAs => Resource::AS,
LinuxRlimitType::RlimitLocks => Resource::LOCKS,
LinuxRlimitType::RlimitSigpending => Resource::SIGPENDING,
LinuxRlimitType::RlimitMsgqueue => Resource::MSGQUEUE,
LinuxRlimitType::RlimitNice => Resource::NICE,
LinuxRlimitType::RlimitRtprio => Resource::RTPRIO,
LinuxRlimitType::RlimitRttime => Resource::RTTIME,
}
}