Refactor common clockid conversion on *nix (#548)
This commit is contained in:
committed by
Alex Crichton
parent
79864d0db7
commit
093629f7eb
@@ -6,16 +6,19 @@ use crate::{wasi, Error, Result};
|
|||||||
use nix::libc::{self, c_int};
|
use nix::libc::{self, c_int};
|
||||||
use std::mem::MaybeUninit;
|
use std::mem::MaybeUninit;
|
||||||
|
|
||||||
pub(crate) fn clock_res_get(clock_id: wasi::__wasi_clockid_t) -> Result<wasi::__wasi_timestamp_t> {
|
fn wasi_clock_id_to_unix(clock_id: wasi::__wasi_clockid_t) -> Result<libc::clockid_t> {
|
||||||
// convert the supported clocks to the libc types, or return EINVAL
|
// convert the supported clocks to the libc types, or return EINVAL
|
||||||
let clock_id = match clock_id {
|
match clock_id {
|
||||||
wasi::__WASI_CLOCK_REALTIME => libc::CLOCK_REALTIME,
|
wasi::__WASI_CLOCK_REALTIME => Ok(libc::CLOCK_REALTIME),
|
||||||
wasi::__WASI_CLOCK_MONOTONIC => libc::CLOCK_MONOTONIC,
|
wasi::__WASI_CLOCK_MONOTONIC => Ok(libc::CLOCK_MONOTONIC),
|
||||||
wasi::__WASI_CLOCK_PROCESS_CPUTIME_ID => libc::CLOCK_PROCESS_CPUTIME_ID,
|
wasi::__WASI_CLOCK_PROCESS_CPUTIME_ID => Ok(libc::CLOCK_PROCESS_CPUTIME_ID),
|
||||||
wasi::__WASI_CLOCK_THREAD_CPUTIME_ID => libc::CLOCK_THREAD_CPUTIME_ID,
|
wasi::__WASI_CLOCK_THREAD_CPUTIME_ID => Ok(libc::CLOCK_THREAD_CPUTIME_ID),
|
||||||
_ => return Err(Error::EINVAL),
|
_ => Err(Error::EINVAL),
|
||||||
};
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn clock_res_get(clock_id: wasi::__wasi_clockid_t) -> Result<wasi::__wasi_timestamp_t> {
|
||||||
|
let clock_id = wasi_clock_id_to_unix(clock_id)?;
|
||||||
// no `nix` wrapper for clock_getres, so we do it ourselves
|
// no `nix` wrapper for clock_getres, so we do it ourselves
|
||||||
let mut timespec = MaybeUninit::<libc::timespec>::uninit();
|
let mut timespec = MaybeUninit::<libc::timespec>::uninit();
|
||||||
let res = unsafe { libc::clock_getres(clock_id, timespec.as_mut_ptr()) };
|
let res = unsafe { libc::clock_getres(clock_id, timespec.as_mut_ptr()) };
|
||||||
@@ -42,15 +45,7 @@ pub(crate) fn clock_res_get(clock_id: wasi::__wasi_clockid_t) -> Result<wasi::__
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn clock_time_get(clock_id: wasi::__wasi_clockid_t) -> Result<wasi::__wasi_timestamp_t> {
|
pub(crate) fn clock_time_get(clock_id: wasi::__wasi_clockid_t) -> Result<wasi::__wasi_timestamp_t> {
|
||||||
// convert the supported clocks to the libc types, or return EINVAL
|
let clock_id = wasi_clock_id_to_unix(clock_id)?;
|
||||||
let clock_id = match clock_id {
|
|
||||||
wasi::__WASI_CLOCK_REALTIME => libc::CLOCK_REALTIME,
|
|
||||||
wasi::__WASI_CLOCK_MONOTONIC => libc::CLOCK_MONOTONIC,
|
|
||||||
wasi::__WASI_CLOCK_PROCESS_CPUTIME_ID => libc::CLOCK_PROCESS_CPUTIME_ID,
|
|
||||||
wasi::__WASI_CLOCK_THREAD_CPUTIME_ID => libc::CLOCK_THREAD_CPUTIME_ID,
|
|
||||||
_ => return Err(Error::EINVAL),
|
|
||||||
};
|
|
||||||
|
|
||||||
// no `nix` wrapper for clock_getres, so we do it ourselves
|
// no `nix` wrapper for clock_getres, so we do it ourselves
|
||||||
let mut timespec = MaybeUninit::<libc::timespec>::uninit();
|
let mut timespec = MaybeUninit::<libc::timespec>::uninit();
|
||||||
let res = unsafe { libc::clock_gettime(clock_id, timespec.as_mut_ptr()) };
|
let res = unsafe { libc::clock_gettime(clock_id, timespec.as_mut_ptr()) };
|
||||||
|
|||||||
Reference in New Issue
Block a user