diff --git a/crates/test-programs/wasi-tests/src/bin/fd_filestat_get.rs b/crates/test-programs/wasi-tests/src/bin/fd_filestat_get.rs new file mode 100644 index 0000000000..d2ba27a1dd --- /dev/null +++ b/crates/test-programs/wasi-tests/src/bin/fd_filestat_get.rs @@ -0,0 +1,25 @@ +unsafe fn test_fd_filestat_get() { + + let stat = wasi::fd_filestat_get(libc::STDIN_FILENO as u32).expect("failed filestat 0"); + assert_eq!(stat.size, 0, "stdio size should be 0"); + assert_eq!(stat.atim, 0, "stdio atim should be 0"); + assert_eq!(stat.mtim, 0, "stdio mtim should be 0"); + assert_eq!(stat.ctim, 0, "stdio ctim should be 0"); + + let stat = wasi::fd_filestat_get(libc::STDOUT_FILENO as u32).expect("failed filestat 1"); + assert_eq!(stat.size, 0, "stdio size should be 0"); + assert_eq!(stat.atim, 0, "stdio atim should be 0"); + assert_eq!(stat.mtim, 0, "stdio mtim should be 0"); + assert_eq!(stat.ctim, 0, "stdio ctim should be 0"); + + let stat = wasi::fd_filestat_get(libc::STDERR_FILENO as u32).expect("failed filestat 2"); + assert_eq!(stat.size, 0, "stdio size should be 0"); + assert_eq!(stat.atim, 0, "stdio atim should be 0"); + assert_eq!(stat.mtim, 0, "stdio mtim should be 0"); + assert_eq!(stat.ctim, 0, "stdio ctim should be 0"); +} + +fn main() { + // Run the tests. + unsafe { test_fd_filestat_get() } +} diff --git a/crates/wasi-common/cap-std-sync/src/stdio.rs b/crates/wasi-common/cap-std-sync/src/stdio.rs index 85dcd21e67..d53702b03f 100644 --- a/crates/wasi-common/cap-std-sync/src/stdio.rs +++ b/crates/wasi-common/cap-std-sync/src/stdio.rs @@ -16,7 +16,7 @@ use io_lifetimes::{AsFd, BorrowedFd}; #[cfg(windows)] use io_lifetimes::{AsHandle, BorrowedHandle}; use wasi_common::{ - file::{FdFlags, FileType, Filestat, WasiFile}, + file::{FdFlags, FileType, WasiFile}, Error, ErrorExt, }; @@ -126,19 +126,6 @@ macro_rules! wasi_file_write_impl { async fn get_fdflags(&mut self) -> Result { Ok(FdFlags::APPEND) } - async fn get_filestat(&mut self) -> Result { - let meta = self.0.as_filelike_view::().metadata()?; - Ok(Filestat { - device_id: 0, - inode: 0, - filetype: self.get_filetype().await?, - nlink: 0, - size: meta.len(), - atim: meta.accessed().ok(), - mtim: meta.modified().ok(), - ctim: meta.created().ok(), - }) - } async fn write_vectored<'a>(&mut self, bufs: &[io::IoSlice<'a>]) -> Result { let n = (&*self.0.as_filelike_view::()).write_vectored(bufs)?; Ok(n.try_into().map_err(|c| Error::range().context(c))?)