Consolidate AsFd instances for stdio types into library/std/src/os/fd/owned.rs
This commit is contained in:
parent
88bb4e4bda
commit
ef68327de7
3 changed files with 54 additions and 98 deletions
|
@ -6,6 +6,7 @@
|
||||||
use super::raw::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
|
use super::raw::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
|
||||||
use crate::fmt;
|
use crate::fmt;
|
||||||
use crate::fs;
|
use crate::fs;
|
||||||
|
use crate::io;
|
||||||
use crate::marker::PhantomData;
|
use crate::marker::PhantomData;
|
||||||
use crate::mem::forget;
|
use crate::mem::forget;
|
||||||
#[cfg(not(any(target_arch = "wasm32", target_env = "sgx")))]
|
#[cfg(not(any(target_arch = "wasm32", target_env = "sgx")))]
|
||||||
|
@ -385,3 +386,54 @@ impl<T: AsFd> AsFd for Box<T> {
|
||||||
(**self).as_fd()
|
(**self).as_fd()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||||
|
impl AsFd for io::Stdin {
|
||||||
|
#[inline]
|
||||||
|
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||||
|
unsafe { BorrowedFd::borrow_raw(0) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||||
|
impl<'a> AsFd for io::StdinLock<'a> {
|
||||||
|
#[inline]
|
||||||
|
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||||
|
// SAFETY: user code should not close stdin out from under the standard library
|
||||||
|
unsafe { BorrowedFd::borrow_raw(0) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||||
|
impl AsFd for io::Stdout {
|
||||||
|
#[inline]
|
||||||
|
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||||
|
unsafe { BorrowedFd::borrow_raw(1) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||||
|
impl<'a> AsFd for io::StdoutLock<'a> {
|
||||||
|
#[inline]
|
||||||
|
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||||
|
// SAFETY: user code should not close stdout out from under the standard library
|
||||||
|
unsafe { BorrowedFd::borrow_raw(1) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||||
|
impl AsFd for io::Stderr {
|
||||||
|
#[inline]
|
||||||
|
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||||
|
unsafe { BorrowedFd::borrow_raw(2) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||||
|
impl<'a> AsFd for io::StderrLock<'a> {
|
||||||
|
#[inline]
|
||||||
|
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||||
|
// SAFETY: user code should not close stderr out from under the standard library
|
||||||
|
unsafe { BorrowedFd::borrow_raw(2) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::io::{self, IoSlice, IoSliceMut};
|
use crate::io::{self, IoSlice, IoSliceMut};
|
||||||
use crate::mem::ManuallyDrop;
|
use crate::mem::ManuallyDrop;
|
||||||
use crate::os::unix::io::{AsFd, BorrowedFd, FromRawFd};
|
use crate::os::unix::io::FromRawFd;
|
||||||
use crate::sys::fd::FileDesc;
|
use crate::sys::fd::FileDesc;
|
||||||
|
|
||||||
pub struct Stdin(());
|
pub struct Stdin(());
|
||||||
|
@ -91,51 +91,3 @@ pub const STDIN_BUF_SIZE: usize = crate::sys_common::io::DEFAULT_BUF_SIZE;
|
||||||
pub fn panic_output() -> Option<impl io::Write> {
|
pub fn panic_output() -> Option<impl io::Write> {
|
||||||
Some(Stderr::new())
|
Some(Stderr::new())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
|
||||||
impl AsFd for io::Stdin {
|
|
||||||
#[inline]
|
|
||||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
||||||
unsafe { BorrowedFd::borrow_raw(libc::STDIN_FILENO) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
|
||||||
impl<'a> AsFd for io::StdinLock<'a> {
|
|
||||||
#[inline]
|
|
||||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
||||||
unsafe { BorrowedFd::borrow_raw(libc::STDIN_FILENO) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
|
||||||
impl AsFd for io::Stdout {
|
|
||||||
#[inline]
|
|
||||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
||||||
unsafe { BorrowedFd::borrow_raw(libc::STDOUT_FILENO) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
|
||||||
impl<'a> AsFd for io::StdoutLock<'a> {
|
|
||||||
#[inline]
|
|
||||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
||||||
unsafe { BorrowedFd::borrow_raw(libc::STDOUT_FILENO) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
|
||||||
impl AsFd for io::Stderr {
|
|
||||||
#[inline]
|
|
||||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
||||||
unsafe { BorrowedFd::borrow_raw(libc::STDERR_FILENO) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
|
||||||
impl<'a> AsFd for io::StderrLock<'a> {
|
|
||||||
#[inline]
|
|
||||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
||||||
unsafe { BorrowedFd::borrow_raw(libc::STDERR_FILENO) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ use super::fd::WasiFd;
|
||||||
use crate::io::{self, IoSlice, IoSliceMut};
|
use crate::io::{self, IoSlice, IoSliceMut};
|
||||||
use crate::mem::ManuallyDrop;
|
use crate::mem::ManuallyDrop;
|
||||||
use crate::os::raw;
|
use crate::os::raw;
|
||||||
use crate::os::wasi::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd};
|
use crate::os::wasi::io::{AsRawFd, FromRawFd};
|
||||||
|
|
||||||
pub struct Stdin;
|
pub struct Stdin;
|
||||||
pub struct Stdout;
|
pub struct Stdout;
|
||||||
|
@ -23,22 +23,6 @@ impl AsRawFd for Stdin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AsFd for io::Stdin {
|
|
||||||
#[inline]
|
|
||||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
||||||
unsafe { BorrowedFd::borrow_raw(0) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
|
||||||
impl<'a> AsFd for io::StdinLock<'a> {
|
|
||||||
#[inline]
|
|
||||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
||||||
// SAFETY: user code should not close stdin out from under the standard library
|
|
||||||
unsafe { BorrowedFd::borrow_raw(0) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl io::Read for Stdin {
|
impl io::Read for Stdin {
|
||||||
fn read(&mut self, data: &mut [u8]) -> io::Result<usize> {
|
fn read(&mut self, data: &mut [u8]) -> io::Result<usize> {
|
||||||
self.read_vectored(&mut [IoSliceMut::new(data)])
|
self.read_vectored(&mut [IoSliceMut::new(data)])
|
||||||
|
@ -67,22 +51,6 @@ impl AsRawFd for Stdout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AsFd for io::Stdout {
|
|
||||||
#[inline]
|
|
||||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
||||||
unsafe { BorrowedFd::borrow_raw(1) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
|
||||||
impl<'a> AsFd for io::StdoutLock<'a> {
|
|
||||||
#[inline]
|
|
||||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
||||||
// SAFETY: user code should not close stdout out from under the standard library
|
|
||||||
unsafe { BorrowedFd::borrow_raw(1) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl io::Write for Stdout {
|
impl io::Write for Stdout {
|
||||||
fn write(&mut self, data: &[u8]) -> io::Result<usize> {
|
fn write(&mut self, data: &[u8]) -> io::Result<usize> {
|
||||||
self.write_vectored(&[IoSlice::new(data)])
|
self.write_vectored(&[IoSlice::new(data)])
|
||||||
|
@ -114,22 +82,6 @@ impl AsRawFd for Stderr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AsFd for io::Stderr {
|
|
||||||
#[inline]
|
|
||||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
||||||
unsafe { BorrowedFd::borrow_raw(2) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
|
||||||
impl<'a> AsFd for io::StderrLock<'a> {
|
|
||||||
#[inline]
|
|
||||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
||||||
// SAFETY: user code should not close stderr out from under the standard library
|
|
||||||
unsafe { BorrowedFd::borrow_raw(2) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl io::Write for Stderr {
|
impl io::Write for Stderr {
|
||||||
fn write(&mut self, data: &[u8]) -> io::Result<usize> {
|
fn write(&mut self, data: &[u8]) -> io::Result<usize> {
|
||||||
self.write_vectored(&[IoSlice::new(data)])
|
self.write_vectored(&[IoSlice::new(data)])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue