about summary refs log tree commit diff
path: root/library/std/src/sys/stdio/wasi.rs
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2025-09-03 21:49:50 -0700
committerAlex Crichton <alex@alexcrichton.com>2025-09-04 09:15:10 -0700
commitd8ca776f6de1d484afc9f847f558bd32b94ceced (patch)
tree9c9cdd9f0e74c947d5fa5277b98bb5355cd040fd /library/std/src/sys/stdio/wasi.rs
parent9385c64c95d971329e62917adc4349c8ccdbafe0 (diff)
downloadrust-d8ca776f6de1d484afc9f847f558bd32b94ceced.tar.gz
rust-d8ca776f6de1d484afc9f847f558bd32b94ceced.zip
std: Implement WASIp2-specific stdio routines
This commit is an extension of previous libstd support but applied to stdio
specifically. The stdio routines are updated away from WASIp1 APIs to using
WASIp2 APIs natively. The end goal is to eventually drop the dependency on
WASIp1 APIs in the standard library entirely in favor of exclusively depending
on WASIp2.
Diffstat (limited to 'library/std/src/sys/stdio/wasi.rs')
-rw-r--r--library/std/src/sys/stdio/wasi.rs117
1 files changed, 0 insertions, 117 deletions
diff --git a/library/std/src/sys/stdio/wasi.rs b/library/std/src/sys/stdio/wasi.rs
deleted file mode 100644
index b70efd026f9..00000000000
--- a/library/std/src/sys/stdio/wasi.rs
+++ /dev/null
@@ -1,117 +0,0 @@
-#![forbid(unsafe_op_in_unsafe_fn)]
-
-use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut};
-use crate::mem::ManuallyDrop;
-use crate::os::raw;
-use crate::os::wasi::io::{AsRawFd, FromRawFd};
-use crate::sys::fd::WasiFd;
-
-pub struct Stdin;
-pub struct Stdout;
-pub struct Stderr;
-
-impl Stdin {
-    pub const fn new() -> Stdin {
-        Stdin
-    }
-}
-
-impl AsRawFd for Stdin {
-    #[inline]
-    fn as_raw_fd(&self) -> raw::c_int {
-        0
-    }
-}
-
-impl io::Read for Stdin {
-    fn read(&mut self, data: &mut [u8]) -> io::Result<usize> {
-        self.read_vectored(&mut [IoSliceMut::new(data)])
-    }
-
-    fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> io::Result<()> {
-        ManuallyDrop::new(unsafe { WasiFd::from_raw_fd(self.as_raw_fd()) }).read_buf(buf)
-    }
-
-    fn read_vectored(&mut self, data: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
-        ManuallyDrop::new(unsafe { WasiFd::from_raw_fd(self.as_raw_fd()) }).read(data)
-    }
-
-    #[inline]
-    fn is_read_vectored(&self) -> bool {
-        true
-    }
-}
-
-impl Stdout {
-    pub const fn new() -> Stdout {
-        Stdout
-    }
-}
-
-impl AsRawFd for Stdout {
-    #[inline]
-    fn as_raw_fd(&self) -> raw::c_int {
-        1
-    }
-}
-
-impl io::Write for Stdout {
-    fn write(&mut self, data: &[u8]) -> io::Result<usize> {
-        self.write_vectored(&[IoSlice::new(data)])
-    }
-
-    fn write_vectored(&mut self, data: &[IoSlice<'_>]) -> io::Result<usize> {
-        ManuallyDrop::new(unsafe { WasiFd::from_raw_fd(self.as_raw_fd()) }).write(data)
-    }
-
-    #[inline]
-    fn is_write_vectored(&self) -> bool {
-        true
-    }
-
-    fn flush(&mut self) -> io::Result<()> {
-        Ok(())
-    }
-}
-
-impl Stderr {
-    pub const fn new() -> Stderr {
-        Stderr
-    }
-}
-
-impl AsRawFd for Stderr {
-    #[inline]
-    fn as_raw_fd(&self) -> raw::c_int {
-        2
-    }
-}
-
-impl io::Write for Stderr {
-    fn write(&mut self, data: &[u8]) -> io::Result<usize> {
-        self.write_vectored(&[IoSlice::new(data)])
-    }
-
-    fn write_vectored(&mut self, data: &[IoSlice<'_>]) -> io::Result<usize> {
-        ManuallyDrop::new(unsafe { WasiFd::from_raw_fd(self.as_raw_fd()) }).write(data)
-    }
-
-    #[inline]
-    fn is_write_vectored(&self) -> bool {
-        true
-    }
-
-    fn flush(&mut self) -> io::Result<()> {
-        Ok(())
-    }
-}
-
-pub const STDIN_BUF_SIZE: usize = crate::sys::io::DEFAULT_BUF_SIZE;
-
-pub fn is_ebadf(err: &io::Error) -> bool {
-    err.raw_os_error() == Some(wasi::ERRNO_BADF.raw().into())
-}
-
-pub fn panic_output() -> Option<impl io::Write> {
-    Some(Stderr::new())
-}