Skip to content

Commit

Permalink
Add AsFd implementations for stdio types on WASI.
Browse files Browse the repository at this point in the history
This mirrors the implementations on Unix platforms, and also mirrors the
existing `AsRawFd` impls.
  • Loading branch information
sunfishcode committed Aug 22, 2022
1 parent e0dc8d7 commit 2efe6b0
Showing 1 changed file with 22 additions and 1 deletion.
23 changes: 22 additions & 1 deletion library/std/src/sys/wasi/stdio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use super::fd::WasiFd;
use crate::io::{self, IoSlice, IoSliceMut};
use crate::mem::ManuallyDrop;
use crate::os::raw;
use crate::os::wasi::io::{AsRawFd, FromRawFd};
use crate::os::wasi::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd};

pub struct Stdin;
pub struct Stdout;
Expand All @@ -23,6 +23,13 @@ impl AsRawFd for Stdin {
}
}

impl AsFd for Stdin {
#[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)])
Expand Down Expand Up @@ -51,6 +58,13 @@ impl AsRawFd for Stdout {
}
}

impl AsFd for Stdout {
#[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)])
Expand Down Expand Up @@ -82,6 +96,13 @@ impl AsRawFd for Stderr {
}
}

impl AsFd for Stderr {
#[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)])
Expand Down

0 comments on commit 2efe6b0

Please sign in to comment.