From 22ad43b43068f9944a042b2cfd6505f23d1b15b0 Mon Sep 17 00:00:00 2001 From: Sakarias Johansson Date: Wed, 16 Dec 2020 14:30:08 +0100 Subject: [PATCH] Add filestat_get for stdout, stdin and stderr This makes fstat work for stdout, stdin and stderr as expected. This seemed like the only reasonable functions to implement from the filestat_* set, for stdout, stdin and stderr. Fixes #2515 --- crates/wasi-common/src/sys/stdio.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/crates/wasi-common/src/sys/stdio.rs b/crates/wasi-common/src/sys/stdio.rs index 97005767d4..9ac6d6c9ca 100644 --- a/crates/wasi-common/src/sys/stdio.rs +++ b/crates/wasi-common/src/sys/stdio.rs @@ -17,7 +17,7 @@ // TODO it might worth re-investigating the suitability of this type on Windows. use super::{fd, AsFile}; -use crate::handle::{Fdflags, Filetype, Handle, HandleRights, Rights, RightsExt, Size}; +use crate::handle::{Fdflags, Filestat, Filetype, Handle, HandleRights, Rights, RightsExt, Size}; use crate::sandboxed_tty_writer::SandboxedTTYWriter; use crate::{Error, Result}; use std::any::Any; @@ -65,6 +65,9 @@ impl Handle for Stdin { } Ok(()) } + fn filestat_get(&self) -> Result { + fd::filestat_get(&*self.as_file()?) + } fn read_vectored(&self, iovs: &mut [io::IoSliceMut]) -> Result { let nread = io::stdin().read_vectored(iovs)?; Ok(nread) @@ -111,6 +114,9 @@ impl Handle for Stdout { } Ok(()) } + fn filestat_get(&self) -> Result { + fd::filestat_get(&*self.as_file()?) + } fn write_vectored(&self, iovs: &[io::IoSlice]) -> Result { // lock for the duration of the scope let stdout = io::stdout(); @@ -165,6 +171,9 @@ impl Handle for Stderr { } Ok(()) } + fn filestat_get(&self) -> Result { + fd::filestat_get(&*self.as_file()?) + } fn write_vectored(&self, iovs: &[io::IoSlice]) -> Result { // Always sanitize stderr, even if it's not directly connected to a tty, // because stderr is meant for diagnostics rather than binary output,