* Introduce WasiCtxBuilderError error type `WasiCtxBuilderError` is the `wasi-common` client-facing error type which is exclusively thrown when building a new `WasiCtx` instance. As such, building such an instance should not require the client to understand different WASI errno values as was assumed until now. This commit is a first step at streamlining error handling in `wasi-common` and makes way for the `wiggle` crate. When adding the `WasiCtxBuilderError`, I've had to do two things of notable importance: 1. I've removed a couple of `ok_or` calls in `WasiCtxBuilder::build` and replaced them with `unwrap`s, following the same pattern in different builder methods above. This is fine since we _always_ operate on non-empty `Option`s in `WasiCtxBuilder` thus `unwrap`ing will never fail. On the other hand, this might be a good opportunity to rethink the structure of our builder, and how we good remove the said `Option`s especially since we always populate them with empty containers to begin with. I understand this is to make chaining of builder methods easier which take and return `&mut self` and the same applies to `WasiCtxBuilder::build(&mut self)` method, but perhaps it would more cleanly signal the intentions if we simply moved `WasiCtxBuilder` instance around. Food for thought! 2. Methods specific to determining rights of passed around `std::fs::File` objects when populating `WasiCtx` `FdEntry` entities now return `io::Error` directly so that we can reuse them in `WasiCtxBuilder` methods (returning `WasiCtxBuilderError` error type), and in syscalls (returning WASI errno). * Return WasiError directly in syscalls Also, removes `error::Error` type altogether. Now, `io::Error` and related are automatically converted to their corresponding WASI errno value encapsulated as `WasiError`. While here, it made sense to me to move `WasiError` to `wasi` module which will align itself well with the upcoming changes introduced by `wiggle`. To different standard `Result` from WASI specific, I've created a helper alias `WasiResult` also residing in `wasi` module. * Update wig * Add from ffi::NulError and pass context to NotADirectory * Add dummy commit to test CI
34 lines
927 B
Rust
34 lines
927 B
Rust
pub(crate) mod fdentry_impl;
|
|
pub(crate) mod host_impl;
|
|
pub(crate) mod hostcalls_impl;
|
|
|
|
cfg_if::cfg_if! {
|
|
if #[cfg(target_os = "linux")] {
|
|
mod linux;
|
|
use self::linux as sys_impl;
|
|
} else if #[cfg(target_os = "emscripten")] {
|
|
mod emscripten;
|
|
use self::emscripten as sys_impl;
|
|
} else if #[cfg(any(target_os = "macos",
|
|
target_os = "netbsd",
|
|
target_os = "freebsd",
|
|
target_os = "openbsd",
|
|
target_os = "ios",
|
|
target_os = "dragonfly"))] {
|
|
mod bsd;
|
|
use self::bsd as sys_impl;
|
|
}
|
|
}
|
|
|
|
use std::fs::{File, OpenOptions};
|
|
use std::io::Result;
|
|
use std::path::Path;
|
|
|
|
pub(crate) fn dev_null() -> Result<File> {
|
|
OpenOptions::new().read(true).write(true).open("/dev/null")
|
|
}
|
|
|
|
pub fn preopen_dir<P: AsRef<Path>>(path: P) -> Result<File> {
|
|
File::open(path)
|
|
}
|