message: Fixes for select on Redox
diff: @@ -675,29 +675,18 @@ impl Pal for Sys {
  let timeout_file = if timeout.is_null() {
  None
  } else {
  - let timeout_file = match RawFile::open(
  - &unsafe {
  + let timeout = unsafe { &*timeout };
  +
  + let timeout_path = unsafe {
  CString::from_vec_unchecked(
  - format!("time:{}", syscall::CLOCK_MONOTONIC).into_bytes(),
  + format!("time:{}\0", syscall::CLOCK_MONOTONIC).into_bytes(),
  )
  - },
  - 0,
  - 0,
  - ) {
  + };
  + 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)
  };
  