diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs index 31e70cb821..916970379f 100644 --- a/src/platform/redox/mod.rs +++ b/src/platform/redox/mod.rs @@ -184,12 +184,27 @@ impl Pal for Sys { } fn clock_getres(clk_id: clockid_t, res: Option>) -> Result<()> { - // TODO - eprintln!( - "relibc clock_getres({}, {:?}): not implemented", - clk_id, res - ); - Err(Errno(ENOSYS)) + let path = format!("/scheme/time/{clk_id}/getres"); + let timerfd = FdGuard::open(&path, syscall::O_RDONLY)?; + let mut redox_res = timespec::default(); + let buffer = unsafe { + slice::from_raw_parts_mut( + &mut redox_res as *mut _ as *mut u8, + mem::size_of::(), + ) + }; + + let bytes_read = redox_rt::sys::posix_read(timerfd.as_raw_fd(), buffer)?; + + if bytes_read < mem::size_of::() { + return Err(Errno(EIO)); + } + + if let Some(mut res) = res { + res.write(redox_res); + } + + Ok(()) } fn clock_gettime(clk_id: clockid_t, tp: Out) -> Result<()> {