arceos_posix_api/imp/
resources.rs1use crate::ctypes;
2use axerrno::LinuxError;
3use core::ffi::c_int;
4
5pub unsafe fn sys_getrlimit(resource: c_int, rlimits: *mut ctypes::rlimit) -> c_int {
9 debug!("sys_getrlimit <= {} {:#x}", resource, rlimits as usize);
10 syscall_body!(sys_getrlimit, {
11 match resource as u32 {
12 ctypes::RLIMIT_DATA => {}
13 ctypes::RLIMIT_STACK => {}
14 ctypes::RLIMIT_NOFILE => {}
15 _ => return Err(LinuxError::EINVAL),
16 }
17 if rlimits.is_null() {
18 return Ok(0);
19 }
20 match resource as u32 {
21 ctypes::RLIMIT_STACK => unsafe {
22 (*rlimits).rlim_cur = axconfig::TASK_STACK_SIZE as _;
23 (*rlimits).rlim_max = axconfig::TASK_STACK_SIZE as _;
24 },
25 #[cfg(feature = "fd")]
26 ctypes::RLIMIT_NOFILE => unsafe {
27 (*rlimits).rlim_cur = super::fd_ops::AX_FILE_LIMIT as _;
28 (*rlimits).rlim_max = super::fd_ops::AX_FILE_LIMIT as _;
29 },
30 _ => {}
31 }
32 Ok(0)
33 })
34}
35
36pub unsafe fn sys_setrlimit(resource: c_int, rlimits: *mut crate::ctypes::rlimit) -> c_int {
40 debug!("sys_setrlimit <= {} {:#x}", resource, rlimits as usize);
41 syscall_body!(sys_setrlimit, {
42 match resource as u32 {
43 crate::ctypes::RLIMIT_DATA => {}
44 crate::ctypes::RLIMIT_STACK => {}
45 crate::ctypes::RLIMIT_NOFILE => {}
46 _ => return Err(LinuxError::EINVAL),
47 }
48 Ok(0)
50 })
51}