Rollup merge of #102847 - joshtriplett:bugfix-impl-fd-traits-for-io-types, r=m-ou-se
impl AsFd and AsRawFd for io::{Stdin, Stdout, Stderr}, not the sys versions https://github.com/rust-lang/rust/pull/100892 implemented AsFd for the sys versions, rather than for the public types. Change the implementations to apply to the public types.
This commit is contained in:
commit
b03bece6f3
@ -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 @@ fn as_fd(&self) -> BorrowedFd<'_> {
|
|||||||
(**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 fn is_ebadf(err: &io::Error) -> bool {
|
|||||||
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 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 @@ fn as_raw_fd(&self) -> raw::c_int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AsFd for 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 @@ fn as_raw_fd(&self) -> raw::c_int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AsFd for 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 @@ fn as_raw_fd(&self) -> raw::c_int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AsFd for 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…
Reference in New Issue
Block a user