From 7e19ce23bdb669c6111295e4ea0ec2dc79a09290 Mon Sep 17 00:00:00 2001 From: Paul Sajna <paulsajna@gmail.com> Date: Fri, 9 Mar 2018 03:26:45 -0800 Subject: [PATCH] nanosleep --- src/platform/src/linux/mod.rs | 4 ++++ src/platform/src/redox/mod.rs | 10 ++++++++++ src/platform/src/types.rs | 6 ++++++ src/time/src/lib.rs | 14 ++++++++------ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/platform/src/linux/mod.rs b/src/platform/src/linux/mod.rs index aa7eef7c..bd573355 100644 --- a/src/platform/src/linux/mod.rs +++ b/src/platform/src/linux/mod.rs @@ -123,6 +123,10 @@ pub fn mkdir(path: *const c_char, mode: mode_t) -> c_int { e(unsafe { syscall!(MKDIRAT, AT_FDCWD, path, mode) }) as c_int } +pub fn nanosleep(rqtp: *const timespec, rmtp: *mut timespec) -> c_int { + e(unsafe { syscall!(NANOSLEEP, rqtp, rmtp) }) as c_int +} + pub fn open(path: *const c_char, oflag: c_int, mode: mode_t) -> c_int { e(unsafe { syscall!(OPENAT, AT_FDCWD, path, oflag, mode) }) as c_int } diff --git a/src/platform/src/redox/mod.rs b/src/platform/src/redox/mod.rs index 264042d7..faa3bc1f 100644 --- a/src/platform/src/redox/mod.rs +++ b/src/platform/src/redox/mod.rs @@ -1,7 +1,9 @@ use core::ptr; use core::slice; +use core::mem; use syscall; use syscall::flag::*; +use syscall::data::TimeSpec as redox_timespec; use c_str; use errno; @@ -135,6 +137,14 @@ 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 + } +} + pub fn open(path: *const c_char, oflag: c_int, mode: mode_t) -> c_int { let path = unsafe { c_str(path) }; e(syscall::open(path, (oflag as usize) | (mode as usize))) as c_int diff --git a/src/platform/src/types.rs b/src/platform/src/types.rs index e8644553..45ae6449 100644 --- a/src/platform/src/types.rs +++ b/src/platform/src/types.rs @@ -63,3 +63,9 @@ pub type suseconds_t = i64; pub type clock_t = i64; pub type clockid_t = i32; pub type timer_t = c_void; + +#[repr(C)] +pub struct timespec { + pub tv_sec: time_t, + pub tv_nsec: c_long, +} diff --git a/src/time/src/lib.rs b/src/time/src/lib.rs index b7817a2b..5b90e86f 100644 --- a/src/time/src/lib.rs +++ b/src/time/src/lib.rs @@ -6,11 +6,13 @@ extern crate platform; use platform::types::*; -#[repr(C)] -pub struct timespec { - pub tv_sec: time_t, - pub tv_nsec: c_long, -} +/* + *#[repr(C)] + *pub struct timespec { + * pub tv_sec: time_t, + * pub tv_nsec: c_long, + *} + */ #[repr(C)] pub struct tm { @@ -112,7 +114,7 @@ pub extern "C" fn mktime(timeptr: *mut tm) -> time_t { #[no_mangle] pub extern "C" fn nanosleep(rqtp: *const timespec, rmtp: *mut timespec) -> c_int { - unimplemented!(); + platform::nanosleep(rqtp, rmtp) } #[no_mangle] -- GitLab