Add AsFd implementations for stdio lock types on WASI.

This mirrors the implementations on Unix platforms, and also mirrors the
existing `AsRawFd` impls.

This is similar to #100892, but is for the `*Lock` types.
This commit is contained in:
Dan Gohman 2022-09-13 09:42:03 -07:00
parent e7119a0300
commit ed812c7add

View file

@ -30,6 +30,13 @@ impl AsFd for Stdin {
}
}
impl<'a> AsFd for StdinLock<'a> {
#[inline]
fn as_fd(&self) -> BorrowedFd<'_> {
unsafe { BorrowedFd::borrow_raw(0) }
}
}
impl io::Read for Stdin {
fn read(&mut self, data: &mut [u8]) -> io::Result<usize> {
self.read_vectored(&mut [IoSliceMut::new(data)])
@ -65,6 +72,13 @@ impl AsFd for Stdout {
}
}
impl<'a> AsFd for StdoutLock<'a> {
#[inline]
fn as_fd(&self) -> BorrowedFd<'_> {
unsafe { BorrowedFd::borrow_raw(1) }
}
}
impl io::Write for Stdout {
fn write(&mut self, data: &[u8]) -> io::Result<usize> {
self.write_vectored(&[IoSlice::new(data)])
@ -103,6 +117,13 @@ impl AsFd for Stderr {
}
}
impl<'a> AsFd for StderrLock<'a> {
#[inline]
fn as_fd(&self) -> BorrowedFd<'_> {
unsafe { BorrowedFd::borrow_raw(2) }
}
}
impl io::Write for Stderr {
fn write(&mut self, data: &[u8]) -> io::Result<usize> {
self.write_vectored(&[IoSlice::new(data)])