Add yanix crate and replace nix with yanix in wasi-common (#649)
* Add yanix crate This commit adds `yanix` crate as a Unix dependency for `wasi-common`. `yanix` stands for Yet Another Nix crate and is exactly what the name suggests: a crate in the spirit of the `nix` crate, but which takes a different approach, using lower-level interfaces with less abstraction, so that it fits better with its main use case, implementation of WASI syscalls. * Replace nix with yanix crate Having introduced `yanix` crate as an in-house replacement for the `nix` crate, this commit makes the necessary changes to `wasi-common` to depend _only_ on `yanix` crate. * Address review comments * make `fd_dup` unsafe * rename `get_fd` to `get_fd_flags`, etc. * reuse `io::Error::last_os_error()` to get the last errno value * Address more comments * make all `fcntl` fns unsafe * adjust `wasi-common` impl appropriately * Make all fns operating on RawFd unsafe * Fix linux build * Address more comments
This commit is contained in:
29
crates/wasi-common/yanix/src/clock.rs
Normal file
29
crates/wasi-common/yanix/src/clock.rs
Normal file
@@ -0,0 +1,29 @@
|
||||
use crate::{Errno, Result};
|
||||
use std::mem::MaybeUninit;
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub enum ClockId {
|
||||
Realtime,
|
||||
Monotonic,
|
||||
ProcessCPUTime,
|
||||
ThreadCPUTime,
|
||||
}
|
||||
|
||||
impl ClockId {
|
||||
pub fn as_raw(&self) -> libc::clockid_t {
|
||||
match self {
|
||||
Self::Realtime => libc::CLOCK_REALTIME,
|
||||
Self::Monotonic => libc::CLOCK_MONOTONIC,
|
||||
Self::ProcessCPUTime => libc::CLOCK_PROCESS_CPUTIME_ID,
|
||||
Self::ThreadCPUTime => libc::CLOCK_THREAD_CPUTIME_ID,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn clock_getres(clock_id: ClockId) -> Result<libc::timespec> {
|
||||
let mut timespec = MaybeUninit::<libc::timespec>::uninit();
|
||||
Errno::from_success_code(unsafe {
|
||||
libc::clock_getres(clock_id.as_raw(), timespec.as_mut_ptr())
|
||||
})?;
|
||||
Ok(unsafe { timespec.assume_init() })
|
||||
}
|
||||
Reference in New Issue
Block a user