From f3a832ad12ff5d0e1277baaec43187d244690b68 Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jeremy@system76.com> Date: Mon, 17 Sep 2018 09:46:40 -0600 Subject: [PATCH] Fixes for select on Redox --- src/platform/redox/mod.rs | 45 ++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs index 0756cd8b..ef927dca 100644 --- a/src/platform/redox/mod.rs +++ b/src/platform/redox/mod.rs @@ -675,29 +675,18 @@ impl Pal for Sys { let timeout_file = if timeout.is_null() { None } else { - let timeout_file = match RawFile::open( - &unsafe { - CString::from_vec_unchecked( - format!("time:{}", syscall::CLOCK_MONOTONIC).into_bytes(), - ) - }, - 0, - 0, - ) { + let timeout = unsafe { &*timeout }; + + let timeout_path = unsafe { + CString::from_vec_unchecked( + format!("time:{}\0", syscall::CLOCK_MONOTONIC).into_bytes(), + ) + }; + let timeout_file = match RawFile::open(&timeout_path, 0, 0) { Ok(file) => file, Err(_) => return -1, }; - let timeout = unsafe { &*timeout }; - if Self::write( - *timeout_file, - &syscall::TimeSpec { - tv_sec: timeout.tv_sec, - tv_nsec: timeout.tv_usec * 1000, - }, - ) < 0 - { - return -1; - } + if Self::write( *event_file, &syscall::Event { @@ -710,6 +699,22 @@ impl Pal for Sys { return -1; } + let mut time = syscall::TimeSpec::default(); + if Self::read(*timeout_file, &mut time) < 0 { + return -1; + } + + time.tv_sec += timeout.tv_sec; + time.tv_nsec += timeout.tv_usec * 1000; + while time.tv_nsec >= 1000000000 { + time.tv_sec += 1; + time.tv_nsec -= 1000000000; + } + + if Self::write(*timeout_file, &time) < 0 { + return -1; + } + Some(timeout_file) }; -- GitLab