Skip to content
Snippets Groups Projects
Unverified Commit edead8e0 authored by Jeremy Soller's avatar Jeremy Soller Committed by GitHub
Browse files

Merge pull request #98 from jeizsm/master

refactor nanosleep
parents 045a510c 31516989
No related branches found
No related tags found
No related merge requests found
...@@ -138,27 +138,23 @@ pub fn mkdir(path: *const c_char, mode: mode_t) -> c_int { ...@@ -138,27 +138,23 @@ pub fn mkdir(path: *const c_char, mode: mode_t) -> c_int {
} }
pub fn nanosleep(rqtp: *const timespec, rmtp: *mut timespec) -> c_int { pub fn nanosleep(rqtp: *const timespec, rmtp: *mut timespec) -> c_int {
unsafe { let redox_rqtp = unsafe { redox_timespec::from(&*rqtp) };
let redox_rqtp = redox_timespec { let mut redox_rmtp: redox_timespec;
tv_sec: (*rqtp).tv_sec, if rmtp.is_null() {
tv_nsec: (*rqtp).tv_nsec as i32, redox_rmtp = redox_timespec::default();
}; } else {
let mut redox_rmtp: redox_timespec; redox_rmtp = unsafe { redox_timespec::from(&*rmtp) };
if rmtp.is_null() { }
redox_rmtp = redox_timespec::default(); match e(syscall::nanosleep(&redox_rqtp, &mut redox_rmtp)) as c_int {
} else { -1 => -1,
redox_rmtp = redox_timespec { _ => {
tv_sec: (*rmtp).tv_sec, unsafe {
tv_nsec: (*rmtp).tv_nsec as i32, if !rmtp.is_null() {
}; (*rmtp).tv_sec = redox_rmtp.tv_sec;
} (*rmtp).tv_nsec = redox_rmtp.tv_nsec as i64;
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
} }
0
} }
} }
} }
......
#[cfg(target_os = "redox")]
use syscall::data::TimeSpec as redox_timespec;
// Use repr(u8) as LLVM expects `void*` to be the same as `i8*` to help enable // Use repr(u8) as LLVM expects `void*` to be the same as `i8*` to help enable
// more optimization opportunities around it recognizing things like // more optimization opportunities around it recognizing things like
// malloc/free. // malloc/free.
...@@ -70,3 +72,13 @@ pub struct timespec { ...@@ -70,3 +72,13 @@ pub struct timespec {
pub tv_sec: time_t, pub tv_sec: time_t,
pub tv_nsec: c_long, pub tv_nsec: c_long,
} }
#[cfg(target_os = "redox")]
impl<'a> From<&'a timespec> for redox_timespec {
fn from(tp: &timespec) -> redox_timespec {
redox_timespec {
tv_sec: tp.tv_sec,
tv_nsec: tp.tv_nsec as i32,
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment