diff --git a/src/platform/src/redox/mod.rs b/src/platform/src/redox/mod.rs index 208ccc0332de71bfef275c38d42df729e2c41e08..d507ceb444f831cdd4b642370d051c364ea31cd8 100644 --- a/src/platform/src/redox/mod.rs +++ b/src/platform/src/redox/mod.rs @@ -139,9 +139,27 @@ pub fn mkdir(path: *const c_char, mode: mode_t) -> c_int { pub fn nanosleep(rqtp: *const timespec, rmtp: *mut timespec) -> c_int { unsafe { - let rqtp = mem::transmute::<*const timespec, &redox_timespec>(rqtp); - let rmtp = mem::transmute::<*mut timespec, &mut redox_timespec>(rmtp); - e(syscall::nanosleep(rqtp, rmtp)) as c_int + let redox_rqtp = redox_timespec { + tv_sec: (*rqtp).tv_sec, + tv_nsec: (*rqtp).tv_nsec as i32, + }; + let mut redox_rmtp: redox_timespec; + if rmtp.is_null() { + redox_rmtp = redox_timespec::default(); + } else { + redox_rmtp = redox_timespec { + tv_sec: (*rmtp).tv_sec, + tv_nsec: (*rmtp).tv_nsec as i32, + }; + } + match e(syscall::nanosleep(&redox_rqtp, &mut redox_rmtp)) as c_int { + -1 => { -1 } + _ => { + (*rmtp).tv_sec = redox_rmtp.tv_sec; + (*rmtp).tv_nsec = redox_rmtp.tv_nsec as i64; + 0 + } + } } }