diff --git a/src/header/sys_resource/mod.rs b/src/header/sys_resource/mod.rs index f56f23f30f..24bed3a243 100644 --- a/src/header/sys_resource/mod.rs +++ b/src/header/sys_resource/mod.rs @@ -88,14 +88,8 @@ pub unsafe extern "C" fn getrlimit(resource: c_int, rlp: *mut rlimit) -> c_int { pub unsafe extern "C" fn setrlimit(resource: c_int, rlp: *const rlimit) -> c_int { Sys::setrlimit(resource, rlp) } -// #[no_mangle] -// pub unsafe extern "C" fn getrusage(who: c_int, r_usage: *mut rusage) -> c_int { -// // Sys::getrusage(who, r_usage) -// unimplemented!(); -// } -// -// #[no_mangle] -// pub unsafe extern "C" fn setpriority(which: c_int, who: id_t, nice: c_int) -> c_int { -// unimplemented!(); -// } -// + +#[no_mangle] +pub unsafe extern "C" fn getrusage(who: c_int, r_usage: *mut rusage) -> c_int { + Sys::getrusage(who, &mut *r_usage) +} \ No newline at end of file diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs index 66f222b32a..ad0536bf60 100644 --- a/src/platform/linux/mod.rs +++ b/src/platform/linux/mod.rs @@ -6,9 +6,8 @@ use crate::{ c_str::CStr, header::{dirent::dirent, errno::EINVAL, signal::SIGCHLD, sys_stat::S_IFIFO}, }; -// use header::sys_resource::rusage; use crate::header::{ - sys_resource::rlimit, + sys_resource::{rlimit, rusage}, sys_stat::stat, sys_statvfs::statvfs, sys_time::{timeval, timezone}, @@ -76,10 +75,6 @@ pub fn e(sys: usize) -> usize { pub struct Sys; impl Sys { - // fn getrusage(who: c_int, r_usage: *mut rusage) -> c_int { - // e(unsafe { syscall!(GETRUSAGE, who, r_usage) }) as c_int - // } - pub unsafe fn ioctl(fd: c_int, request: c_ulong, out: *mut c_void) -> c_int { // TODO: Somehow support varargs to syscall?? e(syscall!(IOCTL, fd, request, out)) as c_int @@ -342,6 +337,10 @@ impl Pal for Sys { e(syscall!(SETRLIMIT, resource, rlimit)) as c_int } + fn getrusage(who: c_int, r_usage: &mut rusage) -> c_int { + e(unsafe { syscall!(GETRUSAGE, who, r_usage) }) as c_int + } + fn getsid(pid: pid_t) -> pid_t { e(unsafe { syscall!(GETSID, pid) }) as pid_t } diff --git a/src/platform/pal/mod.rs b/src/platform/pal/mod.rs index 96e97df695..500a0f5de9 100644 --- a/src/platform/pal/mod.rs +++ b/src/platform/pal/mod.rs @@ -4,7 +4,7 @@ use crate::{ error::Errno, header::{ dirent::dirent, - sys_resource::rlimit, + sys_resource::{rlimit, rusage}, sys_stat::stat, sys_statvfs::statvfs, sys_time::{timeval, timezone}, @@ -128,6 +128,8 @@ pub trait Pal { unsafe fn setrlimit(resource: c_int, rlim: *const rlimit) -> c_int; + fn getrusage(who: c_int, r_usage: &mut rusage) -> c_int; + fn getsid(pid: pid_t) -> pid_t; fn gettid() -> pid_t; diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs index 181fab50e9..e50e8f8798 100644 --- a/src/platform/redox/mod.rs +++ b/src/platform/redox/mod.rs @@ -24,7 +24,7 @@ use crate::{ fcntl, limits, sys_mman::{MAP_ANONYMOUS, MAP_FAILED, PROT_READ, PROT_WRITE}, sys_random, - sys_resource::{rlimit, RLIM_INFINITY}, + sys_resource::{rlimit, rusage, RLIM_INFINITY}, sys_stat::{stat, S_ISGID, S_ISUID}, sys_statvfs::statvfs, sys_time::{timeval, timezone}, @@ -529,6 +529,15 @@ impl Pal for Sys { -1 } + fn getrusage(who: c_int, r_usage: &mut rusage) -> c_int { + //TODO + eprintln!( + "relibc getrusage({}, {:p}): not implemented", + who, r_usage + ); + 0 + } + fn getsid(pid: pid_t) -> pid_t { let mut buf = [0; mem::size_of::()]; let path = if pid == 0 {