* Fix fd_readdir on BSD-style nixes The fix was tested on Darwin-XNU and FreeBSD. The change introduces thread-safe cache of (RawFd, *mut libc::DIR) pairs so that libc::fdopendir syscall is called only once when invoking fd_readdir for the first time, and then the pointer to the directory stream, *mut libc::DIR, is reused until the matching raw file descriptor is closed. This fix allows then correct use (and matching to the implementation on Linux kernels) of libc::seekdir and libc::rewinddir to seek through and rewind the existing directory stream, *mut libc::DIR, which otherwise seems to be reset/invalidated every time libc::fdopendir is called (unlike on Linux, where this behaviour is not observed). * Store dir stream as part of the FdEntry's Descriptor * Move bsd specifics into separate module * Add todo comments and fix formatting * Refactor int conversions * Emphasise in debug logs that we're looking at fd_readdir entry * Change visibility of FdEntry and related to public-private * Rewrite creating DirStream for the first time
wasi-common
This repo will ultimately serve as a library providing a common implementation of WASI hostcalls for re-use in any WASI (and potentially non-WASI) runtimes such as Wasmtime and Lucet.
The library is an adaption of lucet-wasi crate from the Lucet project, and it is currently based on 40ae1df git revision.
Please note that the library requires Rust compiler version at least 1.36.0.
Supported syscalls
*nix
In our *nix implementation, we currently support the entire WASI API with the exception of socket hostcalls:
sock_recvsock_sendsock_shutdown
We expect these to be implemented when network access is standardised.
We also currently do not support the proc_raise hostcall, as it is expected to
be dropped entirely from WASI.
Windows
In our Windows implementation, we currently support the minimal subset of WASI API which allows for running the very basic "Hello world!" style WASM apps. More coming shortly, so stay tuned!
Third-Party Code
Significant parts of our hostcall implementations are derived from the C implementations in
cloudabi-utils. See LICENSE.cloudabi-utils for license information.