Auto-generate the hostcalls module of wasi-common (#846)
* Auto-generate shims for old `wasi_unstable` module This commit is effectively just doing what #707 already did, but applying it to the `snapshot_0` module as well. The end result is the same, where we cut down on all the boilerplate in `snapshot_0` and bring it in line with the main `wasi_snapshot_preview1` implementation. The goal here is to make it easier to change the two in tandem since they're both doing the same thing. * Migrate `wasi_common::hostcalls` to a macro This commit migrates the `hostcalls` module to being auto-generated by a macro rather than duplicating a handwritten signature for each wasi syscall. * Auto-generate snapshot_0's `hostcalls` module Similar to the previous commit, but for `snapshot_0` * Delete the `wasi-common-cbindgen` crate This is no longer needed with the hostcalls macro now, we can easily fold the definition of the cbindgen macro into the same crate. * Rustfmt * Fix windows build errors * Rustfmt * Remove now no-longer-necessary code * rustfmt
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use crate::fs::{error::wasi_errno_to_io_error, File, OpenOptions, ReadDir};
|
||||
use crate::fs::{File, OpenOptions, ReadDir};
|
||||
use crate::{host, hostcalls, wasi, WasiCtx};
|
||||
#[cfg(unix)]
|
||||
use std::os::unix::ffi::OsStrExt;
|
||||
|
||||
@@ -1,265 +0,0 @@
|
||||
use crate::wasi;
|
||||
use std::io;
|
||||
|
||||
/// Translate a WASI errno code into an `io::Result<()>`.
|
||||
///
|
||||
/// TODO: Would it be better to have our own version of `io::Error` (and
|
||||
/// `io::Result`), rather than trying to shoehorn WASI errors into the
|
||||
/// libstd version?
|
||||
pub(crate) fn wasi_errno_to_io_error(errno: wasi::__wasi_errno_t) -> io::Result<()> {
|
||||
#[cfg(unix)]
|
||||
let raw_os_error = match errno {
|
||||
wasi::__WASI_ERRNO_SUCCESS => return Ok(()),
|
||||
wasi::__WASI_ERRNO_IO => libc::EIO,
|
||||
wasi::__WASI_ERRNO_PERM => libc::EPERM,
|
||||
wasi::__WASI_ERRNO_INVAL => libc::EINVAL,
|
||||
wasi::__WASI_ERRNO_PIPE => libc::EPIPE,
|
||||
wasi::__WASI_ERRNO_NOTCONN => libc::ENOTCONN,
|
||||
wasi::__WASI_ERRNO_2BIG => libc::E2BIG,
|
||||
wasi::__WASI_ERRNO_ACCES => libc::EACCES,
|
||||
wasi::__WASI_ERRNO_ADDRINUSE => libc::EADDRINUSE,
|
||||
wasi::__WASI_ERRNO_ADDRNOTAVAIL => libc::EADDRNOTAVAIL,
|
||||
wasi::__WASI_ERRNO_AFNOSUPPORT => libc::EAFNOSUPPORT,
|
||||
wasi::__WASI_ERRNO_AGAIN => libc::EAGAIN,
|
||||
wasi::__WASI_ERRNO_ALREADY => libc::EALREADY,
|
||||
wasi::__WASI_ERRNO_BADF => libc::EBADF,
|
||||
wasi::__WASI_ERRNO_BADMSG => libc::EBADMSG,
|
||||
wasi::__WASI_ERRNO_BUSY => libc::EBUSY,
|
||||
wasi::__WASI_ERRNO_CANCELED => libc::ECANCELED,
|
||||
wasi::__WASI_ERRNO_CHILD => libc::ECHILD,
|
||||
wasi::__WASI_ERRNO_CONNABORTED => libc::ECONNABORTED,
|
||||
wasi::__WASI_ERRNO_CONNREFUSED => libc::ECONNREFUSED,
|
||||
wasi::__WASI_ERRNO_CONNRESET => libc::ECONNRESET,
|
||||
wasi::__WASI_ERRNO_DEADLK => libc::EDEADLK,
|
||||
wasi::__WASI_ERRNO_DESTADDRREQ => libc::EDESTADDRREQ,
|
||||
wasi::__WASI_ERRNO_DOM => libc::EDOM,
|
||||
wasi::__WASI_ERRNO_DQUOT => libc::EDQUOT,
|
||||
wasi::__WASI_ERRNO_EXIST => libc::EEXIST,
|
||||
wasi::__WASI_ERRNO_FAULT => libc::EFAULT,
|
||||
wasi::__WASI_ERRNO_FBIG => libc::EFBIG,
|
||||
wasi::__WASI_ERRNO_HOSTUNREACH => libc::EHOSTUNREACH,
|
||||
wasi::__WASI_ERRNO_IDRM => libc::EIDRM,
|
||||
wasi::__WASI_ERRNO_ILSEQ => libc::EILSEQ,
|
||||
wasi::__WASI_ERRNO_INPROGRESS => libc::EINPROGRESS,
|
||||
wasi::__WASI_ERRNO_INTR => libc::EINTR,
|
||||
wasi::__WASI_ERRNO_ISCONN => libc::EISCONN,
|
||||
wasi::__WASI_ERRNO_ISDIR => libc::EISDIR,
|
||||
wasi::__WASI_ERRNO_LOOP => libc::ELOOP,
|
||||
wasi::__WASI_ERRNO_MFILE => libc::EMFILE,
|
||||
wasi::__WASI_ERRNO_MLINK => libc::EMLINK,
|
||||
wasi::__WASI_ERRNO_MSGSIZE => libc::EMSGSIZE,
|
||||
wasi::__WASI_ERRNO_MULTIHOP => libc::EMULTIHOP,
|
||||
wasi::__WASI_ERRNO_NAMETOOLONG => libc::ENAMETOOLONG,
|
||||
wasi::__WASI_ERRNO_NETDOWN => libc::ENETDOWN,
|
||||
wasi::__WASI_ERRNO_NETRESET => libc::ENETRESET,
|
||||
wasi::__WASI_ERRNO_NETUNREACH => libc::ENETUNREACH,
|
||||
wasi::__WASI_ERRNO_NFILE => libc::ENFILE,
|
||||
wasi::__WASI_ERRNO_NOBUFS => libc::ENOBUFS,
|
||||
wasi::__WASI_ERRNO_NODEV => libc::ENODEV,
|
||||
wasi::__WASI_ERRNO_NOENT => libc::ENOENT,
|
||||
wasi::__WASI_ERRNO_NOEXEC => libc::ENOEXEC,
|
||||
wasi::__WASI_ERRNO_NOLCK => libc::ENOLCK,
|
||||
wasi::__WASI_ERRNO_NOLINK => libc::ENOLINK,
|
||||
wasi::__WASI_ERRNO_NOMEM => libc::ENOMEM,
|
||||
wasi::__WASI_ERRNO_NOMSG => libc::ENOMSG,
|
||||
wasi::__WASI_ERRNO_NOPROTOOPT => libc::ENOPROTOOPT,
|
||||
wasi::__WASI_ERRNO_NOSPC => libc::ENOSPC,
|
||||
wasi::__WASI_ERRNO_NOSYS => libc::ENOSYS,
|
||||
wasi::__WASI_ERRNO_NOTDIR => libc::ENOTDIR,
|
||||
wasi::__WASI_ERRNO_NOTEMPTY => libc::ENOTEMPTY,
|
||||
wasi::__WASI_ERRNO_NOTRECOVERABLE => libc::ENOTRECOVERABLE,
|
||||
wasi::__WASI_ERRNO_NOTSOCK => libc::ENOTSOCK,
|
||||
wasi::__WASI_ERRNO_NOTSUP => libc::ENOTSUP,
|
||||
wasi::__WASI_ERRNO_NOTTY => libc::ENOTTY,
|
||||
wasi::__WASI_ERRNO_NXIO => libc::ENXIO,
|
||||
wasi::__WASI_ERRNO_OVERFLOW => libc::EOVERFLOW,
|
||||
wasi::__WASI_ERRNO_OWNERDEAD => libc::EOWNERDEAD,
|
||||
wasi::__WASI_ERRNO_PROTO => libc::EPROTO,
|
||||
wasi::__WASI_ERRNO_PROTONOSUPPORT => libc::EPROTONOSUPPORT,
|
||||
wasi::__WASI_ERRNO_PROTOTYPE => libc::EPROTOTYPE,
|
||||
wasi::__WASI_ERRNO_RANGE => libc::ERANGE,
|
||||
wasi::__WASI_ERRNO_ROFS => libc::EROFS,
|
||||
wasi::__WASI_ERRNO_SPIPE => libc::ESPIPE,
|
||||
wasi::__WASI_ERRNO_SRCH => libc::ESRCH,
|
||||
wasi::__WASI_ERRNO_STALE => libc::ESTALE,
|
||||
wasi::__WASI_ERRNO_TIMEDOUT => libc::ETIMEDOUT,
|
||||
wasi::__WASI_ERRNO_TXTBSY => libc::ETXTBSY,
|
||||
wasi::__WASI_ERRNO_XDEV => libc::EXDEV,
|
||||
#[cfg(target_os = "wasi")]
|
||||
wasi::__WASI_ERRNO_NOTCAPABLE => libc::ENOTCAPABLE,
|
||||
#[cfg(not(target_os = "wasi"))]
|
||||
wasi::__WASI_ERRNO_NOTCAPABLE => libc::EIO,
|
||||
_ => panic!("unexpected wasi errno value"),
|
||||
};
|
||||
|
||||
#[cfg(windows)]
|
||||
use winapi::shared::winerror::*;
|
||||
|
||||
#[cfg(windows)]
|
||||
let raw_os_error = match errno {
|
||||
wasi::__WASI_ERRNO_SUCCESS => return Ok(()),
|
||||
wasi::__WASI_ERRNO_INVAL => WSAEINVAL,
|
||||
wasi::__WASI_ERRNO_PIPE => ERROR_BROKEN_PIPE,
|
||||
wasi::__WASI_ERRNO_NOTCONN => WSAENOTCONN,
|
||||
wasi::__WASI_ERRNO_PERM | wasi::__WASI_ERRNO_ACCES => ERROR_ACCESS_DENIED,
|
||||
wasi::__WASI_ERRNO_ADDRINUSE => WSAEADDRINUSE,
|
||||
wasi::__WASI_ERRNO_ADDRNOTAVAIL => WSAEADDRNOTAVAIL,
|
||||
wasi::__WASI_ERRNO_AGAIN => WSAEWOULDBLOCK,
|
||||
wasi::__WASI_ERRNO_CONNABORTED => WSAECONNABORTED,
|
||||
wasi::__WASI_ERRNO_CONNREFUSED => WSAECONNREFUSED,
|
||||
wasi::__WASI_ERRNO_CONNRESET => WSAECONNRESET,
|
||||
wasi::__WASI_ERRNO_EXIST => ERROR_ALREADY_EXISTS,
|
||||
wasi::__WASI_ERRNO_NOENT => ERROR_FILE_NOT_FOUND,
|
||||
wasi::__WASI_ERRNO_TIMEDOUT => WSAETIMEDOUT,
|
||||
wasi::__WASI_ERRNO_AFNOSUPPORT => WSAEAFNOSUPPORT,
|
||||
wasi::__WASI_ERRNO_ALREADY => WSAEALREADY,
|
||||
wasi::__WASI_ERRNO_BADF => WSAEBADF,
|
||||
wasi::__WASI_ERRNO_DESTADDRREQ => WSAEDESTADDRREQ,
|
||||
wasi::__WASI_ERRNO_DQUOT => WSAEDQUOT,
|
||||
wasi::__WASI_ERRNO_FAULT => WSAEFAULT,
|
||||
wasi::__WASI_ERRNO_HOSTUNREACH => WSAEHOSTUNREACH,
|
||||
wasi::__WASI_ERRNO_INPROGRESS => WSAEINPROGRESS,
|
||||
wasi::__WASI_ERRNO_INTR => WSAEINTR,
|
||||
wasi::__WASI_ERRNO_ISCONN => WSAEISCONN,
|
||||
wasi::__WASI_ERRNO_LOOP => WSAELOOP,
|
||||
wasi::__WASI_ERRNO_MFILE => WSAEMFILE,
|
||||
wasi::__WASI_ERRNO_MSGSIZE => WSAEMSGSIZE,
|
||||
wasi::__WASI_ERRNO_NAMETOOLONG => WSAENAMETOOLONG,
|
||||
wasi::__WASI_ERRNO_NETDOWN => WSAENETDOWN,
|
||||
wasi::__WASI_ERRNO_NETRESET => WSAENETRESET,
|
||||
wasi::__WASI_ERRNO_NETUNREACH => WSAENETUNREACH,
|
||||
wasi::__WASI_ERRNO_NOBUFS => WSAENOBUFS,
|
||||
wasi::__WASI_ERRNO_NOPROTOOPT => WSAENOPROTOOPT,
|
||||
wasi::__WASI_ERRNO_NOTEMPTY => WSAENOTEMPTY,
|
||||
wasi::__WASI_ERRNO_NOTSOCK => WSAENOTSOCK,
|
||||
wasi::__WASI_ERRNO_PROTONOSUPPORT => WSAEPROTONOSUPPORT,
|
||||
wasi::__WASI_ERRNO_PROTOTYPE => WSAEPROTOTYPE,
|
||||
wasi::__WASI_ERRNO_STALE => WSAESTALE,
|
||||
wasi::__WASI_ERRNO_IO
|
||||
| wasi::__WASI_ERRNO_ISDIR
|
||||
| wasi::__WASI_ERRNO_2BIG
|
||||
| wasi::__WASI_ERRNO_BADMSG
|
||||
| wasi::__WASI_ERRNO_BUSY
|
||||
| wasi::__WASI_ERRNO_CANCELED
|
||||
| wasi::__WASI_ERRNO_CHILD
|
||||
| wasi::__WASI_ERRNO_DEADLK
|
||||
| wasi::__WASI_ERRNO_DOM
|
||||
| wasi::__WASI_ERRNO_FBIG
|
||||
| wasi::__WASI_ERRNO_IDRM
|
||||
| wasi::__WASI_ERRNO_ILSEQ
|
||||
| wasi::__WASI_ERRNO_MLINK
|
||||
| wasi::__WASI_ERRNO_MULTIHOP
|
||||
| wasi::__WASI_ERRNO_NFILE
|
||||
| wasi::__WASI_ERRNO_NODEV
|
||||
| wasi::__WASI_ERRNO_NOEXEC
|
||||
| wasi::__WASI_ERRNO_NOLCK
|
||||
| wasi::__WASI_ERRNO_NOLINK
|
||||
| wasi::__WASI_ERRNO_NOMEM
|
||||
| wasi::__WASI_ERRNO_NOMSG
|
||||
| wasi::__WASI_ERRNO_NOSPC
|
||||
| wasi::__WASI_ERRNO_NOSYS
|
||||
| wasi::__WASI_ERRNO_NOTDIR
|
||||
| wasi::__WASI_ERRNO_NOTRECOVERABLE
|
||||
| wasi::__WASI_ERRNO_NOTSUP
|
||||
| wasi::__WASI_ERRNO_NOTTY
|
||||
| wasi::__WASI_ERRNO_NXIO
|
||||
| wasi::__WASI_ERRNO_OVERFLOW
|
||||
| wasi::__WASI_ERRNO_OWNERDEAD
|
||||
| wasi::__WASI_ERRNO_PROTO
|
||||
| wasi::__WASI_ERRNO_RANGE
|
||||
| wasi::__WASI_ERRNO_ROFS
|
||||
| wasi::__WASI_ERRNO_SPIPE
|
||||
| wasi::__WASI_ERRNO_SRCH
|
||||
| wasi::__WASI_ERRNO_TXTBSY
|
||||
| wasi::__WASI_ERRNO_XDEV
|
||||
| wasi::__WASI_ERRNO_NOTCAPABLE => {
|
||||
return Err(io::Error::new(io::ErrorKind::Other, error_str(errno)))
|
||||
}
|
||||
_ => panic!("unrecognized WASI errno value"),
|
||||
} as i32;
|
||||
|
||||
Err(io::Error::from_raw_os_error(raw_os_error))
|
||||
}
|
||||
|
||||
#[cfg(windows)]
|
||||
fn error_str(errno: wasi::__wasi_errno_t) -> &'static str {
|
||||
match errno {
|
||||
wasi::__WASI_ERRNO_2BIG => "Argument list too long",
|
||||
wasi::__WASI_ERRNO_ACCES => "Permission denied",
|
||||
wasi::__WASI_ERRNO_ADDRINUSE => "Address in use",
|
||||
wasi::__WASI_ERRNO_ADDRNOTAVAIL => "Address not available",
|
||||
wasi::__WASI_ERRNO_AFNOSUPPORT => "Address family not supported by protocol",
|
||||
wasi::__WASI_ERRNO_AGAIN => "Resource temporarily unavailable",
|
||||
wasi::__WASI_ERRNO_ALREADY => "Operation already in progress",
|
||||
wasi::__WASI_ERRNO_BADF => "Bad file descriptor",
|
||||
wasi::__WASI_ERRNO_BADMSG => "Bad message",
|
||||
wasi::__WASI_ERRNO_BUSY => "Resource busy",
|
||||
wasi::__WASI_ERRNO_CANCELED => "Operation canceled",
|
||||
wasi::__WASI_ERRNO_CHILD => "No child process",
|
||||
wasi::__WASI_ERRNO_CONNABORTED => "Connection aborted",
|
||||
wasi::__WASI_ERRNO_CONNREFUSED => "Connection refused",
|
||||
wasi::__WASI_ERRNO_CONNRESET => "Connection reset by peer",
|
||||
wasi::__WASI_ERRNO_DEADLK => "Resource deadlock would occur",
|
||||
wasi::__WASI_ERRNO_DESTADDRREQ => "Destination address required",
|
||||
wasi::__WASI_ERRNO_DOM => "Domain error",
|
||||
wasi::__WASI_ERRNO_DQUOT => "Quota exceeded",
|
||||
wasi::__WASI_ERRNO_EXIST => "File exists",
|
||||
wasi::__WASI_ERRNO_FAULT => "Bad address",
|
||||
wasi::__WASI_ERRNO_FBIG => "File too large",
|
||||
wasi::__WASI_ERRNO_HOSTUNREACH => "Host is unreachable",
|
||||
wasi::__WASI_ERRNO_IDRM => "Identifier removed",
|
||||
wasi::__WASI_ERRNO_ILSEQ => "Illegal byte sequence",
|
||||
wasi::__WASI_ERRNO_INPROGRESS => "Operation in progress",
|
||||
wasi::__WASI_ERRNO_INTR => "Interrupted system call",
|
||||
wasi::__WASI_ERRNO_INVAL => "Invalid argument",
|
||||
wasi::__WASI_ERRNO_IO => "Remote I/O error",
|
||||
wasi::__WASI_ERRNO_ISCONN => "Socket is connected",
|
||||
wasi::__WASI_ERRNO_ISDIR => "Is a directory",
|
||||
wasi::__WASI_ERRNO_LOOP => "Symbolic link loop",
|
||||
wasi::__WASI_ERRNO_MFILE => "No file descriptors available",
|
||||
wasi::__WASI_ERRNO_MLINK => "Too many links",
|
||||
wasi::__WASI_ERRNO_MSGSIZE => "Message too large",
|
||||
wasi::__WASI_ERRNO_MULTIHOP => "Multihop attempted",
|
||||
wasi::__WASI_ERRNO_NAMETOOLONG => "Filename too long",
|
||||
wasi::__WASI_ERRNO_NETDOWN => "Network is down",
|
||||
wasi::__WASI_ERRNO_NETRESET => "Connection reset by network",
|
||||
wasi::__WASI_ERRNO_NETUNREACH => "Network unreachable",
|
||||
wasi::__WASI_ERRNO_NFILE => "Too many open files in system",
|
||||
wasi::__WASI_ERRNO_NOBUFS => "No buffer space available",
|
||||
wasi::__WASI_ERRNO_NODEV => "No such device",
|
||||
wasi::__WASI_ERRNO_NOENT => "No such file or directory",
|
||||
wasi::__WASI_ERRNO_NOEXEC => "Exec format error",
|
||||
wasi::__WASI_ERRNO_NOLCK => "No locks available",
|
||||
wasi::__WASI_ERRNO_NOLINK => "Link has been severed",
|
||||
wasi::__WASI_ERRNO_NOMEM => "Out of memory",
|
||||
wasi::__WASI_ERRNO_NOMSG => "No message of desired type",
|
||||
wasi::__WASI_ERRNO_NOPROTOOPT => "Protocol not available",
|
||||
wasi::__WASI_ERRNO_NOSPC => "No space left on device",
|
||||
wasi::__WASI_ERRNO_NOSYS => "Function not implemented",
|
||||
wasi::__WASI_ERRNO_NOTCONN => "Socket not connected",
|
||||
wasi::__WASI_ERRNO_NOTDIR => "Not a directory",
|
||||
wasi::__WASI_ERRNO_NOTEMPTY => "Directory not empty",
|
||||
wasi::__WASI_ERRNO_NOTRECOVERABLE => "State not recoverable",
|
||||
wasi::__WASI_ERRNO_NOTSOCK => "Not a socket",
|
||||
wasi::__WASI_ERRNO_NOTSUP => "Not supported",
|
||||
wasi::__WASI_ERRNO_NOTTY => "Not a tty",
|
||||
wasi::__WASI_ERRNO_NXIO => "No such device or address",
|
||||
wasi::__WASI_ERRNO_OVERFLOW => "Value too large for data type",
|
||||
wasi::__WASI_ERRNO_OWNERDEAD => "Previous owner died",
|
||||
wasi::__WASI_ERRNO_PERM => "Operation not permitted",
|
||||
wasi::__WASI_ERRNO_PIPE => "Broken pipe",
|
||||
wasi::__WASI_ERRNO_PROTO => "Protocol error",
|
||||
wasi::__WASI_ERRNO_PROTONOSUPPORT => "Protocol not supported",
|
||||
wasi::__WASI_ERRNO_PROTOTYPE => "Protocol wrong type for socket",
|
||||
wasi::__WASI_ERRNO_RANGE => "Result not representable",
|
||||
wasi::__WASI_ERRNO_ROFS => "Read-only file system",
|
||||
wasi::__WASI_ERRNO_SPIPE => "Invalid seek",
|
||||
wasi::__WASI_ERRNO_SRCH => "No such process",
|
||||
wasi::__WASI_ERRNO_STALE => "Stale file handle",
|
||||
wasi::__WASI_ERRNO_TIMEDOUT => "Operation timed out",
|
||||
wasi::__WASI_ERRNO_TXTBSY => "Text file busy",
|
||||
wasi::__WASI_ERRNO_XDEV => "Cross-device link",
|
||||
wasi::__WASI_ERRNO_NOTCAPABLE => "Capabilities insufficient",
|
||||
_ => panic!("unrecognized WASI errno value"),
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::fs::{error::wasi_errno_to_io_error, Metadata};
|
||||
use crate::{host, hostcalls, wasi, WasiCtx};
|
||||
use crate::fs::Metadata;
|
||||
use crate::{host, hostcalls, hostcalls_impl, wasi, Result, WasiCtx};
|
||||
use std::io;
|
||||
|
||||
/// A reference to an open file on the filesystem.
|
||||
@@ -34,8 +34,11 @@ impl<'ctx> File<'ctx> {
|
||||
/// This corresponds to [`std::fs::File::sync_all`].
|
||||
///
|
||||
/// [`std::fs::File::sync_all`]: https://doc.rust-lang.org/std/fs/struct.File.html#method.sync_all
|
||||
pub fn sync_all(&self) -> io::Result<()> {
|
||||
wasi_errno_to_io_error(unsafe { hostcalls::fd_sync(self.ctx, &mut [], self.fd) })
|
||||
pub fn sync_all(&self) -> Result<()> {
|
||||
unsafe {
|
||||
hostcalls_impl::fd_sync(self.ctx, &mut [], self.fd)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// This function is similar to `sync_all`, except that it may not synchronize
|
||||
@@ -44,8 +47,11 @@ impl<'ctx> File<'ctx> {
|
||||
/// This corresponds to [`std::fs::File::sync_data`].
|
||||
///
|
||||
/// [`std::fs::File::sync_data`]: https://doc.rust-lang.org/std/fs/struct.File.html#method.sync_data
|
||||
pub fn sync_data(&self) -> io::Result<()> {
|
||||
wasi_errno_to_io_error(unsafe { hostcalls::fd_datasync(self.ctx, &mut [], self.fd) })
|
||||
pub fn sync_data(&self) -> Result<()> {
|
||||
unsafe {
|
||||
hostcalls_impl::fd_datasync(self.ctx, &mut [], self.fd)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Truncates or extends the underlying file, updating the size of this file
|
||||
@@ -54,10 +60,11 @@ impl<'ctx> File<'ctx> {
|
||||
/// This corresponds to [`std::fs::File::set_len`].
|
||||
///
|
||||
/// [`std::fs::File::set_len`]: https://doc.rust-lang.org/std/fs/struct.File.html#method.set_len
|
||||
pub fn set_len(&self, size: u64) -> io::Result<()> {
|
||||
wasi_errno_to_io_error(unsafe {
|
||||
hostcalls::fd_filestat_set_size(self.ctx, &mut [], self.fd, size)
|
||||
})
|
||||
pub fn set_len(&self, size: u64) -> Result<()> {
|
||||
unsafe {
|
||||
hostcalls_impl::fd_filestat_set_size(self.ctx, &mut [], self.fd, size)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Queries metadata about the underlying file.
|
||||
@@ -65,7 +72,7 @@ impl<'ctx> File<'ctx> {
|
||||
/// This corresponds to [`std::fs::File::metadata`].
|
||||
///
|
||||
/// [`std::fs::File::metadata`]: https://doc.rust-lang.org/std/fs/struct.File.html#method.metadata
|
||||
pub fn metadata(&self) -> io::Result<Metadata> {
|
||||
pub fn metadata(&self) -> Result<Metadata> {
|
||||
Ok(Metadata {})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
mod dir;
|
||||
mod dir_builder;
|
||||
mod dir_entry;
|
||||
mod error;
|
||||
mod file;
|
||||
mod file_type;
|
||||
mod metadata;
|
||||
|
||||
0
crates/wasi-common/src/hostcalls.rs
Normal file
0
crates/wasi-common/src/hostcalls.rs
Normal file
@@ -1,263 +0,0 @@
|
||||
#![allow(non_camel_case_types)]
|
||||
use crate::ctx::WasiCtx;
|
||||
use crate::{wasi, wasi32};
|
||||
|
||||
hostcalls! {
|
||||
pub unsafe fn fd_close(wasi_ctx: &mut WasiCtx, memory: &mut [u8], fd: wasi::__wasi_fd_t,) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_datasync(wasi_ctx: &WasiCtx, memory: &mut [u8], fd: wasi::__wasi_fd_t,) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_pread(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
iovs_ptr: wasi32::uintptr_t,
|
||||
iovs_len: wasi32::size_t,
|
||||
offset: wasi::__wasi_filesize_t,
|
||||
nread: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_pwrite(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
iovs_ptr: wasi32::uintptr_t,
|
||||
iovs_len: wasi32::size_t,
|
||||
offset: wasi::__wasi_filesize_t,
|
||||
nwritten: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_read(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
iovs_ptr: wasi32::uintptr_t,
|
||||
iovs_len: wasi32::size_t,
|
||||
nread: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_renumber(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
from: wasi::__wasi_fd_t,
|
||||
to: wasi::__wasi_fd_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_seek(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
offset: wasi::__wasi_filedelta_t,
|
||||
whence: wasi::__wasi_whence_t,
|
||||
newoffset: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_tell(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
newoffset: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_fdstat_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
fdstat_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_fdstat_set_flags(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
fdflags: wasi::__wasi_fdflags_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_fdstat_set_rights(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
fs_rights_base: wasi::__wasi_rights_t,
|
||||
fs_rights_inheriting: wasi::__wasi_rights_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_sync(wasi_ctx: &WasiCtx, memory: &mut [u8], fd: wasi::__wasi_fd_t,) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_write(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
iovs_ptr: wasi32::uintptr_t,
|
||||
iovs_len: wasi32::size_t,
|
||||
nwritten: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_advise(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
offset: wasi::__wasi_filesize_t,
|
||||
len: wasi::__wasi_filesize_t,
|
||||
advice: wasi::__wasi_advice_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_allocate(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
offset: wasi::__wasi_filesize_t,
|
||||
len: wasi::__wasi_filesize_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_create_directory(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_link(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
old_dirfd: wasi::__wasi_fd_t,
|
||||
old_flags: wasi::__wasi_lookupflags_t,
|
||||
old_path_ptr: wasi32::uintptr_t,
|
||||
old_path_len: wasi32::size_t,
|
||||
new_dirfd: wasi::__wasi_fd_t,
|
||||
new_path_ptr: wasi32::uintptr_t,
|
||||
new_path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_open(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
dirflags: wasi::__wasi_lookupflags_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
oflags: wasi::__wasi_oflags_t,
|
||||
fs_rights_base: wasi::__wasi_rights_t,
|
||||
fs_rights_inheriting: wasi::__wasi_rights_t,
|
||||
fs_flags: wasi::__wasi_fdflags_t,
|
||||
fd_out_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_readdir(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
buf: wasi32::uintptr_t,
|
||||
buf_len: wasi32::size_t,
|
||||
cookie: wasi::__wasi_dircookie_t,
|
||||
buf_used: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_readlink(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
buf_ptr: wasi32::uintptr_t,
|
||||
buf_len: wasi32::size_t,
|
||||
buf_used: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_rename(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
old_dirfd: wasi::__wasi_fd_t,
|
||||
old_path_ptr: wasi32::uintptr_t,
|
||||
old_path_len: wasi32::size_t,
|
||||
new_dirfd: wasi::__wasi_fd_t,
|
||||
new_path_ptr: wasi32::uintptr_t,
|
||||
new_path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_filestat_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
filestat_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_filestat_set_times(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
st_atim: wasi::__wasi_timestamp_t,
|
||||
st_mtim: wasi::__wasi_timestamp_t,
|
||||
fst_flags: wasi::__wasi_fstflags_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_filestat_set_size(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
st_size: wasi::__wasi_filesize_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_filestat_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
dirflags: wasi::__wasi_lookupflags_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
filestat_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_filestat_set_times(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
dirflags: wasi::__wasi_lookupflags_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
st_atim: wasi::__wasi_timestamp_t,
|
||||
st_mtim: wasi::__wasi_timestamp_t,
|
||||
fst_flags: wasi::__wasi_fstflags_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_symlink(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
old_path_ptr: wasi32::uintptr_t,
|
||||
old_path_len: wasi32::size_t,
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
new_path_ptr: wasi32::uintptr_t,
|
||||
new_path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_unlink_file(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_remove_directory(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_prestat_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
prestat_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_prestat_dir_name(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
#![allow(non_camel_case_types)]
|
||||
use crate::ctx::WasiCtx;
|
||||
use crate::{wasi, wasi32};
|
||||
use log::trace;
|
||||
use wasi_common_cbindgen::wasi_common_cbindgen;
|
||||
|
||||
#[wasi_common_cbindgen]
|
||||
pub unsafe fn proc_exit(_wasi_ctx: &WasiCtx, _memory: &mut [u8], rval: wasi::__wasi_exitcode_t) {
|
||||
trace!("proc_exit(rval={:?})", rval);
|
||||
// TODO: Rather than call std::process::exit here, we should trigger a
|
||||
// stack unwind similar to a trap.
|
||||
std::process::exit(rval as i32);
|
||||
}
|
||||
|
||||
#[wasi_common_cbindgen]
|
||||
pub unsafe fn proc_raise(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sig: wasi::__wasi_signal_t,
|
||||
) -> wasi::__wasi_errno_t {
|
||||
unimplemented!("proc_raise")
|
||||
}
|
||||
|
||||
hostcalls! {
|
||||
pub unsafe fn args_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
argv_ptr: wasi32::uintptr_t,
|
||||
argv_buf: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn args_sizes_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
argc_ptr: wasi32::uintptr_t,
|
||||
argv_buf_size_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn environ_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
environ_ptr: wasi32::uintptr_t,
|
||||
environ_buf: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn environ_sizes_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
environ_count_ptr: wasi32::uintptr_t,
|
||||
environ_size_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn random_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
buf_ptr: wasi32::uintptr_t,
|
||||
buf_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn clock_res_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
clock_id: wasi::__wasi_clockid_t,
|
||||
resolution_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn clock_time_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
clock_id: wasi::__wasi_clockid_t,
|
||||
precision: wasi::__wasi_timestamp_t,
|
||||
time_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn poll_oneoff(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
input: wasi32::uintptr_t,
|
||||
output: wasi32::uintptr_t,
|
||||
nsubscriptions: wasi32::size_t,
|
||||
nevents: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn sched_yield(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
) -> wasi::__wasi_errno_t;
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
mod fs;
|
||||
mod misc;
|
||||
mod sock;
|
||||
|
||||
pub use self::fs::*;
|
||||
pub use self::misc::*;
|
||||
pub use self::sock::*;
|
||||
@@ -1,43 +0,0 @@
|
||||
#![allow(non_camel_case_types)]
|
||||
#![allow(unused_unsafe)]
|
||||
#![allow(unused)]
|
||||
use crate::ctx::WasiCtx;
|
||||
use crate::{wasi, wasi32};
|
||||
use wasi_common_cbindgen::wasi_common_cbindgen;
|
||||
|
||||
#[wasi_common_cbindgen]
|
||||
pub unsafe fn sock_recv(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
sock: wasi::__wasi_fd_t,
|
||||
ri_data: wasi32::uintptr_t,
|
||||
ri_data_len: wasi32::size_t,
|
||||
ri_flags: wasi::__wasi_riflags_t,
|
||||
ro_datalen: wasi32::uintptr_t,
|
||||
ro_flags: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t {
|
||||
unimplemented!("sock_recv")
|
||||
}
|
||||
|
||||
#[wasi_common_cbindgen]
|
||||
pub unsafe fn sock_send(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
sock: wasi::__wasi_fd_t,
|
||||
si_data: wasi32::uintptr_t,
|
||||
si_data_len: wasi32::size_t,
|
||||
si_flags: wasi::__wasi_siflags_t,
|
||||
so_datalen: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t {
|
||||
unimplemented!("sock_send")
|
||||
}
|
||||
|
||||
#[wasi_common_cbindgen]
|
||||
pub unsafe fn sock_shutdown(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
sock: wasi::__wasi_fd_t,
|
||||
how: wasi::__wasi_sdflags_t,
|
||||
) -> wasi::__wasi_errno_t {
|
||||
unimplemented!("sock_shutdown")
|
||||
}
|
||||
@@ -326,3 +326,18 @@ pub(crate) struct FdEventData<'a> {
|
||||
pub(crate) r#type: wasi::__wasi_eventtype_t,
|
||||
pub(crate) userdata: wasi::__wasi_userdata_t,
|
||||
}
|
||||
|
||||
pub(crate) fn proc_exit(_wasi_ctx: &WasiCtx, _memory: &mut [u8], rval: wasi::__wasi_exitcode_t) {
|
||||
trace!("proc_exit(rval={:?})", rval);
|
||||
// TODO: Rather than call std::process::exit here, we should trigger a
|
||||
// stack unwind similar to a trap.
|
||||
std::process::exit(rval as i32);
|
||||
}
|
||||
|
||||
pub(crate) fn proc_raise(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sig: wasi::__wasi_signal_t,
|
||||
) -> Result<()> {
|
||||
unimplemented!("proc_raise")
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
mod fs;
|
||||
mod fs_helpers;
|
||||
mod misc;
|
||||
mod sock;
|
||||
|
||||
pub(crate) use self::fs::*;
|
||||
pub(crate) use self::fs_helpers::PathGet;
|
||||
pub(crate) use self::misc::*;
|
||||
pub(crate) use self::sock::*;
|
||||
|
||||
36
crates/wasi-common/src/hostcalls_impl/sock.rs
Normal file
36
crates/wasi-common/src/hostcalls_impl/sock.rs
Normal file
@@ -0,0 +1,36 @@
|
||||
use crate::ctx::WasiCtx;
|
||||
use crate::{wasi, wasi32, Result};
|
||||
|
||||
pub fn sock_recv(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sock: wasi::__wasi_fd_t,
|
||||
_ri_data: wasi32::uintptr_t,
|
||||
_ri_data_len: wasi32::size_t,
|
||||
_ri_flags: wasi::__wasi_riflags_t,
|
||||
_ro_datalen: wasi32::uintptr_t,
|
||||
_ro_flags: wasi32::uintptr_t,
|
||||
) -> Result<()> {
|
||||
unimplemented!("sock_recv")
|
||||
}
|
||||
|
||||
pub fn sock_send(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sock: wasi::__wasi_fd_t,
|
||||
_si_data: wasi32::uintptr_t,
|
||||
_si_data_len: wasi32::size_t,
|
||||
_si_flags: wasi::__wasi_siflags_t,
|
||||
_so_datalen: wasi32::uintptr_t,
|
||||
) -> Result<()> {
|
||||
unimplemented!("sock_send")
|
||||
}
|
||||
|
||||
pub fn sock_shutdown(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sock: wasi::__wasi_fd_t,
|
||||
_how: wasi::__wasi_sdflags_t,
|
||||
) -> Result<()> {
|
||||
unimplemented!("sock_shutdown")
|
||||
}
|
||||
@@ -24,20 +24,21 @@
|
||||
mod ctx;
|
||||
mod error;
|
||||
mod fdentry;
|
||||
mod helpers;
|
||||
mod hostcalls_impl;
|
||||
mod sandboxed_tty_writer;
|
||||
mod sys;
|
||||
#[macro_use]
|
||||
mod macros;
|
||||
pub mod fs;
|
||||
mod helpers;
|
||||
mod host;
|
||||
pub mod hostcalls;
|
||||
mod hostcalls_impl;
|
||||
mod memory;
|
||||
pub mod old;
|
||||
mod sandboxed_tty_writer;
|
||||
mod sys;
|
||||
pub mod wasi;
|
||||
pub mod wasi32;
|
||||
|
||||
pub mod hostcalls {
|
||||
wig::define_hostcalls!("snapshot" "wasi_snapshot_preview1");
|
||||
}
|
||||
|
||||
pub use ctx::{WasiCtx, WasiCtxBuilder};
|
||||
pub use sys::preopen_dir;
|
||||
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
macro_rules! hostcalls {
|
||||
($(pub unsafe fn $name:ident($($arg:ident: $ty:ty,)*) -> $ret:ty;)*) => ($(
|
||||
#[wasi_common_cbindgen::wasi_common_cbindgen]
|
||||
pub unsafe fn $name($($arg: $ty,)*) -> $ret {
|
||||
let ret = crate::hostcalls_impl::$name($($arg,)*)
|
||||
.err()
|
||||
.unwrap_or(crate::Error::ESUCCESS)
|
||||
.as_wasi_error();
|
||||
log::trace!(" | errno={}", ret);
|
||||
ret.as_raw_errno()
|
||||
}
|
||||
)*)
|
||||
}
|
||||
|
||||
// Like `hostcalls`, but uses `wasi_common_cbindgen_old`, which means
|
||||
// it doesn't declare a non-mangled function name.
|
||||
macro_rules! hostcalls_old {
|
||||
($(pub unsafe fn $name:ident($($arg:ident: $ty:ty,)*) -> $ret:ty;)*) => ($(
|
||||
#[wasi_common_cbindgen::wasi_common_cbindgen_old]
|
||||
pub unsafe fn $name($($arg: $ty,)*) -> $ret {
|
||||
let ret = crate::old::snapshot_0::hostcalls_impl::$name($($arg,)*)
|
||||
.err()
|
||||
.unwrap_or(crate::old::snapshot_0::Error::ESUCCESS)
|
||||
.as_wasi_error();
|
||||
log::trace!(" | errno={}", ret);
|
||||
ret.as_raw_errno()
|
||||
}
|
||||
)*)
|
||||
}
|
||||
@@ -1,256 +0,0 @@
|
||||
#![allow(non_camel_case_types)]
|
||||
use crate::old::snapshot_0::ctx::WasiCtx;
|
||||
use crate::old::snapshot_0::{wasi, wasi32};
|
||||
|
||||
hostcalls_old! {
|
||||
pub unsafe fn fd_close(wasi_ctx: &mut WasiCtx, fd: wasi::__wasi_fd_t,) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_datasync(wasi_ctx: &WasiCtx, fd: wasi::__wasi_fd_t,) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_pread(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
iovs_ptr: wasi32::uintptr_t,
|
||||
iovs_len: wasi32::size_t,
|
||||
offset: wasi::__wasi_filesize_t,
|
||||
nread: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_pwrite(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
iovs_ptr: wasi32::uintptr_t,
|
||||
iovs_len: wasi32::size_t,
|
||||
offset: wasi::__wasi_filesize_t,
|
||||
nwritten: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_read(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
iovs_ptr: wasi32::uintptr_t,
|
||||
iovs_len: wasi32::size_t,
|
||||
nread: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_renumber(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
from: wasi::__wasi_fd_t,
|
||||
to: wasi::__wasi_fd_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_seek(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
offset: wasi::__wasi_filedelta_t,
|
||||
whence: wasi::__wasi_whence_t,
|
||||
newoffset: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_tell(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
newoffset: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_fdstat_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
fdstat_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_fdstat_set_flags(
|
||||
wasi_ctx: &WasiCtx,
|
||||
fd: wasi::__wasi_fd_t,
|
||||
fdflags: wasi::__wasi_fdflags_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_fdstat_set_rights(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
fd: wasi::__wasi_fd_t,
|
||||
fs_rights_base: wasi::__wasi_rights_t,
|
||||
fs_rights_inheriting: wasi::__wasi_rights_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_sync(wasi_ctx: &WasiCtx, fd: wasi::__wasi_fd_t,) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_write(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
iovs_ptr: wasi32::uintptr_t,
|
||||
iovs_len: wasi32::size_t,
|
||||
nwritten: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_advise(
|
||||
wasi_ctx: &WasiCtx,
|
||||
fd: wasi::__wasi_fd_t,
|
||||
offset: wasi::__wasi_filesize_t,
|
||||
len: wasi::__wasi_filesize_t,
|
||||
advice: wasi::__wasi_advice_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_allocate(
|
||||
wasi_ctx: &WasiCtx,
|
||||
fd: wasi::__wasi_fd_t,
|
||||
offset: wasi::__wasi_filesize_t,
|
||||
len: wasi::__wasi_filesize_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_create_directory(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_link(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
old_dirfd: wasi::__wasi_fd_t,
|
||||
old_flags: wasi::__wasi_lookupflags_t,
|
||||
old_path_ptr: wasi32::uintptr_t,
|
||||
old_path_len: wasi32::size_t,
|
||||
new_dirfd: wasi::__wasi_fd_t,
|
||||
new_path_ptr: wasi32::uintptr_t,
|
||||
new_path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_open(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
dirflags: wasi::__wasi_lookupflags_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
oflags: wasi::__wasi_oflags_t,
|
||||
fs_rights_base: wasi::__wasi_rights_t,
|
||||
fs_rights_inheriting: wasi::__wasi_rights_t,
|
||||
fs_flags: wasi::__wasi_fdflags_t,
|
||||
fd_out_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_readdir(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
buf: wasi32::uintptr_t,
|
||||
buf_len: wasi32::size_t,
|
||||
cookie: wasi::__wasi_dircookie_t,
|
||||
buf_used: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_readlink(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
buf_ptr: wasi32::uintptr_t,
|
||||
buf_len: wasi32::size_t,
|
||||
buf_used: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_rename(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
old_dirfd: wasi::__wasi_fd_t,
|
||||
old_path_ptr: wasi32::uintptr_t,
|
||||
old_path_len: wasi32::size_t,
|
||||
new_dirfd: wasi::__wasi_fd_t,
|
||||
new_path_ptr: wasi32::uintptr_t,
|
||||
new_path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_filestat_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
filestat_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_filestat_set_times(
|
||||
wasi_ctx: &WasiCtx,
|
||||
fd: wasi::__wasi_fd_t,
|
||||
st_atim: wasi::__wasi_timestamp_t,
|
||||
st_mtim: wasi::__wasi_timestamp_t,
|
||||
fst_flags: wasi::__wasi_fstflags_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_filestat_set_size(
|
||||
wasi_ctx: &WasiCtx,
|
||||
fd: wasi::__wasi_fd_t,
|
||||
st_size: wasi::__wasi_filesize_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_filestat_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
dirflags: wasi::__wasi_lookupflags_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
filestat_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_filestat_set_times(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
dirflags: wasi::__wasi_lookupflags_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
st_atim: wasi::__wasi_timestamp_t,
|
||||
st_mtim: wasi::__wasi_timestamp_t,
|
||||
fst_flags: wasi::__wasi_fstflags_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_symlink(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
old_path_ptr: wasi32::uintptr_t,
|
||||
old_path_len: wasi32::size_t,
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
new_path_ptr: wasi32::uintptr_t,
|
||||
new_path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_unlink_file(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn path_remove_directory(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
dirfd: wasi::__wasi_fd_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_prestat_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
prestat_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn fd_prestat_dir_name(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
path_ptr: wasi32::uintptr_t,
|
||||
path_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
}
|
||||
@@ -1,82 +0,0 @@
|
||||
#![allow(non_camel_case_types)]
|
||||
use crate::old::snapshot_0::ctx::WasiCtx;
|
||||
use crate::old::snapshot_0::{wasi, wasi32};
|
||||
use log::trace;
|
||||
use wasi_common_cbindgen::wasi_common_cbindgen_old;
|
||||
|
||||
#[wasi_common_cbindgen_old]
|
||||
pub unsafe fn proc_exit(rval: wasi::__wasi_exitcode_t) {
|
||||
trace!("proc_exit(rval={:?})", rval);
|
||||
// TODO: Rather than call std::process::exit here, we should trigger a
|
||||
// stack unwind similar to a trap.
|
||||
std::process::exit(rval as i32);
|
||||
}
|
||||
|
||||
#[wasi_common_cbindgen_old]
|
||||
pub unsafe fn proc_raise(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sig: wasi::__wasi_signal_t,
|
||||
) -> wasi::__wasi_errno_t {
|
||||
unimplemented!("proc_raise")
|
||||
}
|
||||
|
||||
hostcalls_old! {
|
||||
pub unsafe fn args_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
argv_ptr: wasi32::uintptr_t,
|
||||
argv_buf: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn args_sizes_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
argc_ptr: wasi32::uintptr_t,
|
||||
argv_buf_size_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn environ_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
environ_ptr: wasi32::uintptr_t,
|
||||
environ_buf: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn environ_sizes_get(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
environ_count_ptr: wasi32::uintptr_t,
|
||||
environ_size_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn random_get(
|
||||
memory: &mut [u8],
|
||||
buf_ptr: wasi32::uintptr_t,
|
||||
buf_len: wasi32::size_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn clock_res_get(
|
||||
memory: &mut [u8],
|
||||
clock_id: wasi::__wasi_clockid_t,
|
||||
resolution_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn clock_time_get(
|
||||
memory: &mut [u8],
|
||||
clock_id: wasi::__wasi_clockid_t,
|
||||
precision: wasi::__wasi_timestamp_t,
|
||||
time_ptr: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn poll_oneoff(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
input: wasi32::uintptr_t,
|
||||
output: wasi32::uintptr_t,
|
||||
nsubscriptions: wasi32::size_t,
|
||||
nevents: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t;
|
||||
|
||||
pub unsafe fn sched_yield() -> wasi::__wasi_errno_t;
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
mod fs;
|
||||
mod misc;
|
||||
mod sock;
|
||||
|
||||
pub use self::fs::*;
|
||||
pub use self::misc::*;
|
||||
pub use self::sock::*;
|
||||
@@ -1,43 +0,0 @@
|
||||
#![allow(non_camel_case_types)]
|
||||
#![allow(unused_unsafe)]
|
||||
#![allow(unused)]
|
||||
use crate::old::snapshot_0::ctx::WasiCtx;
|
||||
use crate::old::snapshot_0::{wasi, wasi32};
|
||||
use wasi_common_cbindgen::wasi_common_cbindgen_old;
|
||||
|
||||
#[wasi_common_cbindgen_old]
|
||||
pub unsafe fn sock_recv(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
sock: wasi::__wasi_fd_t,
|
||||
ri_data: wasi32::uintptr_t,
|
||||
ri_data_len: wasi32::size_t,
|
||||
ri_flags: wasi::__wasi_riflags_t,
|
||||
ro_datalen: wasi32::uintptr_t,
|
||||
ro_flags: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t {
|
||||
unimplemented!("sock_recv")
|
||||
}
|
||||
|
||||
#[wasi_common_cbindgen_old]
|
||||
pub unsafe fn sock_send(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
sock: wasi::__wasi_fd_t,
|
||||
si_data: wasi32::uintptr_t,
|
||||
si_data_len: wasi32::size_t,
|
||||
si_flags: wasi::__wasi_siflags_t,
|
||||
so_datalen: wasi32::uintptr_t,
|
||||
) -> wasi::__wasi_errno_t {
|
||||
unimplemented!("sock_send")
|
||||
}
|
||||
|
||||
#[wasi_common_cbindgen_old]
|
||||
pub unsafe fn sock_shutdown(
|
||||
wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
sock: wasi::__wasi_fd_t,
|
||||
how: wasi::__wasi_sdflags_t,
|
||||
) -> wasi::__wasi_errno_t {
|
||||
unimplemented!("sock_shutdown")
|
||||
}
|
||||
@@ -16,7 +16,11 @@ use std::io::{self, Read, Seek, SeekFrom, Write};
|
||||
use std::ops::DerefMut;
|
||||
use std::time::{Duration, SystemTime, UNIX_EPOCH};
|
||||
|
||||
pub(crate) unsafe fn fd_close(wasi_ctx: &mut WasiCtx, fd: wasi::__wasi_fd_t) -> Result<()> {
|
||||
pub(crate) unsafe fn fd_close(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
) -> Result<()> {
|
||||
trace!("fd_close(fd={:?})", fd);
|
||||
|
||||
if let Ok(fe) = wasi_ctx.get_fd_entry(fd) {
|
||||
@@ -30,7 +34,11 @@ pub(crate) unsafe fn fd_close(wasi_ctx: &mut WasiCtx, fd: wasi::__wasi_fd_t) ->
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(crate) unsafe fn fd_datasync(wasi_ctx: &WasiCtx, fd: wasi::__wasi_fd_t) -> Result<()> {
|
||||
pub(crate) unsafe fn fd_datasync(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
) -> Result<()> {
|
||||
trace!("fd_datasync(fd={:?})", fd);
|
||||
|
||||
let fd = wasi_ctx
|
||||
@@ -175,6 +183,7 @@ pub(crate) unsafe fn fd_read(
|
||||
|
||||
pub(crate) unsafe fn fd_renumber(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
from: wasi::__wasi_fd_t,
|
||||
to: wasi::__wasi_fd_t,
|
||||
) -> Result<()> {
|
||||
@@ -291,6 +300,7 @@ pub(crate) unsafe fn fd_fdstat_get(
|
||||
|
||||
pub(crate) unsafe fn fd_fdstat_set_flags(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
fdflags: wasi::__wasi_fdflags_t,
|
||||
) -> Result<()> {
|
||||
@@ -306,6 +316,7 @@ pub(crate) unsafe fn fd_fdstat_set_flags(
|
||||
|
||||
pub(crate) unsafe fn fd_fdstat_set_rights(
|
||||
wasi_ctx: &mut WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
fs_rights_base: wasi::__wasi_rights_t,
|
||||
fs_rights_inheriting: wasi::__wasi_rights_t,
|
||||
@@ -329,7 +340,11 @@ pub(crate) unsafe fn fd_fdstat_set_rights(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(crate) unsafe fn fd_sync(wasi_ctx: &WasiCtx, fd: wasi::__wasi_fd_t) -> Result<()> {
|
||||
pub(crate) unsafe fn fd_sync(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
) -> Result<()> {
|
||||
trace!("fd_sync(fd={:?})", fd);
|
||||
|
||||
let fd = wasi_ctx
|
||||
@@ -397,6 +412,7 @@ pub(crate) unsafe fn fd_write(
|
||||
|
||||
pub(crate) unsafe fn fd_advise(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
offset: wasi::__wasi_filesize_t,
|
||||
len: wasi::__wasi_filesize_t,
|
||||
@@ -420,6 +436,7 @@ pub(crate) unsafe fn fd_advise(
|
||||
|
||||
pub(crate) unsafe fn fd_allocate(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
offset: wasi::__wasi_filesize_t,
|
||||
len: wasi::__wasi_filesize_t,
|
||||
@@ -702,6 +719,7 @@ pub(crate) unsafe fn fd_filestat_get(
|
||||
|
||||
pub(crate) unsafe fn fd_filestat_set_times(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
st_atim: wasi::__wasi_timestamp_t,
|
||||
st_mtim: wasi::__wasi_timestamp_t,
|
||||
@@ -761,6 +779,7 @@ pub(crate) fn fd_filestat_set_times_impl(
|
||||
|
||||
pub(crate) unsafe fn fd_filestat_set_size(
|
||||
wasi_ctx: &WasiCtx,
|
||||
_mem: &mut [u8],
|
||||
fd: wasi::__wasi_fd_t,
|
||||
st_size: wasi::__wasi_filesize_t,
|
||||
) -> Result<()> {
|
||||
|
||||
@@ -128,6 +128,7 @@ pub(crate) fn environ_sizes_get(
|
||||
}
|
||||
|
||||
pub(crate) fn random_get(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
buf_ptr: wasi32::uintptr_t,
|
||||
buf_len: wasi32::size_t,
|
||||
@@ -143,6 +144,7 @@ pub(crate) fn random_get(
|
||||
}
|
||||
|
||||
pub(crate) fn clock_res_get(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
clock_id: wasi::__wasi_clockid_t,
|
||||
resolution_ptr: wasi32::uintptr_t,
|
||||
@@ -161,6 +163,7 @@ pub(crate) fn clock_res_get(
|
||||
}
|
||||
|
||||
pub(crate) fn clock_time_get(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
memory: &mut [u8],
|
||||
clock_id: wasi::__wasi_clockid_t,
|
||||
precision: wasi::__wasi_timestamp_t,
|
||||
@@ -180,7 +183,7 @@ pub(crate) fn clock_time_get(
|
||||
enc_timestamp_byref(memory, time_ptr, time)
|
||||
}
|
||||
|
||||
pub(crate) fn sched_yield() -> Result<()> {
|
||||
pub(crate) fn sched_yield(_wasi_ctx: &WasiCtx, _memory: &mut [u8]) -> Result<()> {
|
||||
trace!("sched_yield()");
|
||||
|
||||
std::thread::yield_now();
|
||||
@@ -314,3 +317,18 @@ pub(crate) struct FdEventData<'a> {
|
||||
pub(crate) r#type: wasi::__wasi_eventtype_t,
|
||||
pub(crate) userdata: wasi::__wasi_userdata_t,
|
||||
}
|
||||
|
||||
pub(crate) fn proc_exit(_wasi_ctx: &WasiCtx, _memory: &mut [u8], rval: wasi::__wasi_exitcode_t) {
|
||||
trace!("proc_exit(rval={:?})", rval);
|
||||
// TODO: Rather than call std::process::exit here, we should trigger a
|
||||
// stack unwind similar to a trap.
|
||||
std::process::exit(rval as i32);
|
||||
}
|
||||
|
||||
pub(crate) fn proc_raise(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sig: wasi::__wasi_signal_t,
|
||||
) -> Result<()> {
|
||||
unimplemented!("proc_raise")
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
mod fs;
|
||||
mod fs_helpers;
|
||||
mod misc;
|
||||
mod sock;
|
||||
|
||||
pub(crate) use self::fs::*;
|
||||
pub(crate) use self::fs_helpers::PathGet;
|
||||
pub(crate) use self::misc::*;
|
||||
pub(crate) use self::sock::*;
|
||||
|
||||
35
crates/wasi-common/src/old/snapshot_0/hostcalls_impl/sock.rs
Normal file
35
crates/wasi-common/src/old/snapshot_0/hostcalls_impl/sock.rs
Normal file
@@ -0,0 +1,35 @@
|
||||
use crate::old::snapshot_0::{wasi, wasi32, Result, WasiCtx};
|
||||
|
||||
pub fn sock_recv(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sock: wasi::__wasi_fd_t,
|
||||
_ri_data: wasi32::uintptr_t,
|
||||
_ri_data_len: wasi32::size_t,
|
||||
_ri_flags: wasi::__wasi_riflags_t,
|
||||
_ro_datalen: wasi32::uintptr_t,
|
||||
_ro_flags: wasi32::uintptr_t,
|
||||
) -> Result<()> {
|
||||
unimplemented!("sock_recv")
|
||||
}
|
||||
|
||||
pub fn sock_send(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sock: wasi::__wasi_fd_t,
|
||||
_si_data: wasi32::uintptr_t,
|
||||
_si_data_len: wasi32::size_t,
|
||||
_si_flags: wasi::__wasi_siflags_t,
|
||||
_so_datalen: wasi32::uintptr_t,
|
||||
) -> Result<()> {
|
||||
unimplemented!("sock_send")
|
||||
}
|
||||
|
||||
pub fn sock_shutdown(
|
||||
_wasi_ctx: &WasiCtx,
|
||||
_memory: &mut [u8],
|
||||
_sock: wasi::__wasi_fd_t,
|
||||
_how: wasi::__wasi_sdflags_t,
|
||||
) -> Result<()> {
|
||||
unimplemented!("sock_shutdown")
|
||||
}
|
||||
@@ -3,13 +3,16 @@ mod error;
|
||||
mod fdentry;
|
||||
mod helpers;
|
||||
mod host;
|
||||
pub mod hostcalls;
|
||||
mod hostcalls_impl;
|
||||
mod memory;
|
||||
mod sys;
|
||||
pub mod wasi;
|
||||
pub mod wasi32;
|
||||
|
||||
pub mod hostcalls {
|
||||
wig::define_hostcalls!("old/snapshot_0" "wasi_unstable");
|
||||
}
|
||||
|
||||
pub use ctx::{WasiCtx, WasiCtxBuilder};
|
||||
|
||||
pub type Error = error::Error;
|
||||
|
||||
Reference in New Issue
Block a user