From 2db85f9a3f3c4de90ef74756814b2228e4d2785f Mon Sep 17 00:00:00 2001 From: David Carlier <devnexen@gmail.com> Date: Mon, 8 May 2023 18:52:05 +0100 Subject: [PATCH] clock_getres/clock_settime additions --- src/header/time/mod.rs | 10 +++++----- src/platform/linux/mod.rs | 8 ++++++++ src/platform/pal/mod.rs | 4 ++++ src/platform/redox/mod.rs | 12 ++++++++++++ 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/header/time/mod.rs b/src/header/time/mod.rs index cebe2ac51..f83991230 100644 --- a/src/header/time/mod.rs +++ b/src/header/time/mod.rs @@ -198,9 +198,9 @@ pub extern "C" fn clock() -> clock_t { } } -// #[no_mangle] -pub extern "C" fn clock_getres(clock_id: clockid_t, res: *mut timespec) -> c_int { - unimplemented!(); +#[no_mangle] +pub extern "C" fn clock_getres(clock_id: clockid_t, tp: *mut timespec) -> c_int { + Sys::clock_getres(clock_id, tp) } #[no_mangle] @@ -208,9 +208,9 @@ pub extern "C" fn clock_gettime(clock_id: clockid_t, tp: *mut timespec) -> c_int Sys::clock_gettime(clock_id, tp) } -// #[no_mangle] +#[no_mangle] pub extern "C" fn clock_settime(clock_id: clockid_t, tp: *const timespec) -> c_int { - unimplemented!(); + Sys::clock_settime(clock_id, tp) } #[no_mangle] diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs index 722f23836..0cb325a86 100644 --- a/src/platform/linux/mod.rs +++ b/src/platform/linux/mod.rs @@ -106,10 +106,18 @@ impl Pal for Sys { }) as c_int } + fn clock_getres(clk_id: clockid_t, tp: *mut timespec) -> c_int { + e(unsafe { syscall!(CLOCK_GETRES, clk_id, tp) }) as c_int + } + fn clock_gettime(clk_id: clockid_t, tp: *mut timespec) -> c_int { e(unsafe { syscall!(CLOCK_GETTIME, clk_id, tp) }) as c_int } + fn clock_settime(clk_id: clockid_t, tp: *const timespec) -> c_int { + e(unsafe { syscall!(CLOCK_SETTIME, clk_id, tp) }) as c_int + } + fn close(fildes: c_int) -> c_int { e(unsafe { syscall!(CLOSE, fildes) }) as c_int } diff --git a/src/platform/pal/mod.rs b/src/platform/pal/mod.rs index c6bdc770a..02726debd 100644 --- a/src/platform/pal/mod.rs +++ b/src/platform/pal/mod.rs @@ -35,8 +35,12 @@ pub trait Pal { fn chown(path: &CStr, owner: uid_t, group: gid_t) -> c_int; + fn clock_getres(clk_id: clockid_t, tp: *mut timespec) -> c_int; + fn clock_gettime(clk_id: clockid_t, tp: *mut timespec) -> c_int; + fn clock_settime(clk_id: clockid_t, tp: *const timespec) -> c_int; + fn close(fildes: c_int) -> c_int; fn dup(fildes: c_int) -> c_int; diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs index decf4fd35..4b4f0f0e7 100644 --- a/src/platform/redox/mod.rs +++ b/src/platform/redox/mod.rs @@ -184,6 +184,12 @@ impl Pal for Sys { } } + fn clock_getres(clk_id: clockid_t, tp: *mut timespec) -> c_int { + // TODO + unsafe { errno = ENOSYS }; + -1 + } + fn clock_gettime(clk_id: clockid_t, tp: *mut timespec) -> c_int { let mut redox_tp = unsafe { redox_timespec::from(&*tp) }; match e(syscall::clock_gettime(clk_id as usize, &mut redox_tp)) as c_int { @@ -198,6 +204,12 @@ impl Pal for Sys { } } + fn clock_settime(clk_id: clockid_t, tp: *const timespec) -> c_int { + // TODO + unsafe { errno = ENOSYS }; + -1 + } + fn close(fd: c_int) -> c_int { e(syscall::close(fd as usize)) as c_int } -- GitLab