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:
40
crates/wasi-common/yanix/src/lib.rs
Normal file
40
crates/wasi-common/yanix/src/lib.rs
Normal file
@@ -0,0 +1,40 @@
|
||||
//! `yanix` stands for Yet Another Nix crate, and, well, it is simply
|
||||
//! a yet another crate in the spirit of the [nix] crate. As such,
|
||||
//! this crate is inspired by the original `nix` crate, however,
|
||||
//! it takes a different approach, using lower-level interfaces with
|
||||
//! less abstraction, so that it fits better with its main use case
|
||||
//! which is our WASI implementation, [wasi-common].
|
||||
//!
|
||||
//! [nix]: https://github.com/nix-rust/nix
|
||||
//! [wasi-common]: https://github.com/bytecodealliance/wasmtime/tree/master/crates/wasi-common
|
||||
#![cfg(unix)]
|
||||
|
||||
pub mod clock;
|
||||
pub mod dir;
|
||||
pub mod fcntl;
|
||||
pub mod file;
|
||||
pub mod poll;
|
||||
pub mod socket;
|
||||
|
||||
mod errno;
|
||||
mod sys;
|
||||
|
||||
pub mod fadvise {
|
||||
pub use super::sys::fadvise::*;
|
||||
}
|
||||
|
||||
pub use errno::Errno;
|
||||
use std::{ffi, num};
|
||||
use thiserror::Error;
|
||||
|
||||
pub type Result<T> = std::result::Result<T, YanixError>;
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
pub enum YanixError {
|
||||
#[error("raw os error {0}")]
|
||||
Errno(#[from] Errno),
|
||||
#[error("a nul byte was not found in the expected position")]
|
||||
NulError(#[from] ffi::NulError),
|
||||
#[error("integral type conversion failed")]
|
||||
TryFromIntError(#[from] num::TryFromIntError),
|
||||
}
|
||||
Reference in New Issue
Block a user