//! sys/resource.h implementation for Redox, following //! http://pubs.opengroup.org/onlinepubs/7908799/xsh/sysresource.h.html use crate::{ error::ResultExt, header::sys_time::timeval, platform::{types::*, Pal, Sys}, }; // Exported in bits file // const RUSAGE_SELF: c_int = 0; // const RUSAGE_CHILDREN: c_int = -1; // const RUSAGE_BOTH: c_int = -2; // const RUSAGE_THREAD: c_int = 1; pub const RLIM_INFINITY: u64 = 0xFFFF_FFFF_FFFF_FFFF; pub const RLIM_SAVED_CUR: u64 = RLIM_INFINITY; pub const RLIM_SAVED_MAX: u64 = RLIM_INFINITY; pub const RLIMIT_CPU: u64 = 0; pub const RLIMIT_FSIZE: u64 = 1; pub const RLIMIT_DATA: u64 = 2; pub const RLIMIT_STACK: u64 = 3; pub const RLIMIT_CORE: u64 = 4; pub const RLIMIT_RSS: u64 = 5; pub const RLIMIT_NPROC: u64 = 6; pub const RLIMIT_NOFILE: u64 = 7; pub const RLIMIT_MEMLOCK: u64 = 8; pub const RLIMIT_AS: u64 = 9; pub const RLIMIT_LOCKS: u64 = 10; pub const RLIMIT_SIGPENDING: u64 = 11; pub const RLIMIT_MSGQUEUE: u64 = 12; pub const RLIMIT_NICE: u64 = 13; pub const RLIMIT_RTPRIO: u64 = 14; pub const RLIMIT_NLIMITS: u64 = 15; pub type rlim_t = u64; #[repr(C)] pub struct rlimit { pub rlim_cur: rlim_t, pub rlim_max: rlim_t, } #[repr(C)] pub struct rusage { pub ru_utime: timeval, pub ru_stime: timeval, pub ru_maxrss: c_long, pub ru_ixrss: c_long, pub ru_idrss: c_long, pub ru_isrss: c_long, pub ru_minflt: c_long, pub ru_majflt: c_long, pub ru_nswap: c_long, pub ru_inblock: c_long, pub ru_oublock: c_long, pub ru_msgsnd: c_long, pub ru_msgrcv: c_long, pub ru_nsignals: c_long, pub ru_nvcsw: c_long, pub ru_nivcsw: c_long, } pub const PRIO_PROCESS: c_int = 0; pub const PRIO_PGRP: c_int = 1; pub const PRIO_USER: c_int = 2; #[no_mangle] pub unsafe extern "C" fn getpriority(which: c_int, who: id_t) -> c_int { let r = Sys::getpriority(which, who).or_minus_one_errno(); if r < 0 { return r; } 20 - r } #[no_mangle] pub unsafe extern "C" fn setpriority(which: c_int, who: id_t, nice: c_int) -> c_int { Sys::setpriority(which, who, nice) .map(|()| 0) .or_minus_one_errno() } #[no_mangle] pub unsafe extern "C" fn getrlimit(resource: c_int, rlp: *mut rlimit) -> c_int { Sys::getrlimit(resource, rlp) .map(|()| 0) .or_minus_one_errno() } #[no_mangle] pub unsafe extern "C" fn setrlimit(resource: c_int, rlp: *const rlimit) -> c_int { Sys::setrlimit(resource, rlp) .map(|()| 0) .or_minus_one_errno() } #[no_mangle] pub unsafe extern "C" fn getrusage(who: c_int, r_usage: *mut rusage) -> c_int { Sys::getrusage(who, &mut *r_usage) .map(|()| 0) .or_minus_one_errno() }