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
// 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<Filestat> {
+ fd::filestat_get(&*self.as_file()?)
+ }
fn read_vectored(&self, iovs: &mut [io::IoSliceMut]) -> Result<usize> {
let nread = io::stdin().read_vectored(iovs)?;
Ok(nread)
@@ -111,6 +114,9 @@ impl Handle for Stdout {
}
Ok(())
}
+ fn filestat_get(&self) -> Result<Filestat> {
+ fd::filestat_get(&*self.as_file()?)
+ }
fn write_vectored(&self, iovs: &[io::IoSlice]) -> Result<usize> {
// 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<Filestat> {
+ fd::filestat_get(&*self.as_file()?)
+ }
fn write_vectored(&self, iovs: &[io::IoSlice]) -> Result<usize> {
// Always sanitize stderr, even if it's not directly connected to a tty,
// because stderr is meant for diagnostics rather than binary output,
