Skip to content

Commit 2d65a40

Browse files
Update to wasi 0.11 (#253)
* Update to wasi 0.11 The main breaking change between v0.10 and v0.11 is that Error is removed in favour of Errno. Unfortunately we can't create an Errno from outside the wasi create so we're loosing some debug information for errors. I've opened an issue to add back such a constructor, see <bytecodealliance/wasi-rs#64>. * Use libc::strerror to get the error message on wasi Since wasi v0.11 doesn't (yet) provided a way to create Errno, see <bytecodealliance/wasi-rs#64>. * Remove libc dependency for WASI This does mean that we won't get an error message for the error type.
1 parent 4882ac8 commit 2d65a40

File tree

3 files changed

+5
-13
lines changed

3 files changed

+5
-13
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ core = { version = "1.0", optional = true, package = "rustc-std-workspace-core"
2121
libc = { version = "0.2.120", default-features = false }
2222

2323
[target.'cfg(target_os = "wasi")'.dependencies]
24-
wasi = "0.10"
24+
wasi = "0.11"
2525

2626
[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies]
2727
wasm-bindgen = { version = "0.2.62", default-features = false, optional = true }

src/error.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,6 @@ cfg_if! {
109109
let idx = buf.iter().position(|&b| b == 0).unwrap_or(n);
110110
core::str::from_utf8(&buf[..idx]).ok()
111111
}
112-
} else if #[cfg(target_os = "wasi")] {
113-
fn os_err(errno: i32, _buf: &mut [u8]) -> Option<wasi::Error> {
114-
wasi::Error::from_raw_error(errno as _)
115-
}
116112
} else {
117113
fn os_err(_errno: i32, _buf: &mut [u8]) -> Option<&str> {
118114
None

src/wasi.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,11 @@
99
//! Implementation for WASI
1010
use crate::Error;
1111
use core::num::NonZeroU32;
12-
use wasi::random_get;
12+
use wasi::wasi_snapshot_preview1::random_get;
1313

1414
pub fn getrandom_inner(dest: &mut [u8]) -> Result<(), Error> {
15-
unsafe {
16-
random_get(dest.as_mut_ptr(), dest.len()).map_err(|e: wasi::Error| {
17-
// convert wasi's Error into getrandom's NonZeroU32 error
18-
// SAFETY: `wasi::Error` is `NonZeroU16` internally, so `e.raw_error()`
19-
// will never return 0
20-
NonZeroU32::new_unchecked(e.raw_error() as u32).into()
21-
})
15+
match unsafe { random_get(dest.as_mut_ptr() as i32, dest.len() as i32) } {
16+
0 => Ok(()),
17+
err => Err(unsafe { NonZeroU32::new_unchecked(err as u32) }.into()),
2218
}
2319
}

0 commit comments

Comments
 (0)