Skip to content

Commit 6e3f2e6

Browse files
authored
Rollup merge of rust-lang#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 rust-lang#100892 implemented AsFd for the sys versions, rather than for the public types. Change the implementations to apply to the public types.
2 parents 8cb570d + ef68327 commit 6e3f2e6

File tree

3 files changed

+54
-98
lines changed

3 files changed

+54
-98
lines changed

library/std/src/os/fd/owned.rs

+52
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use super::raw::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
77
use crate::fmt;
88
use crate::fs;
9+
use crate::io;
910
use crate::marker::PhantomData;
1011
use crate::mem::forget;
1112
#[cfg(not(any(target_arch = "wasm32", target_env = "sgx")))]
@@ -385,3 +386,54 @@ impl<T: AsFd> AsFd for Box<T> {
385386
(**self).as_fd()
386387
}
387388
}
389+
390+
#[stable(feature = "io_safety", since = "1.63.0")]
391+
impl AsFd for io::Stdin {
392+
#[inline]
393+
fn as_fd(&self) -> BorrowedFd<'_> {
394+
unsafe { BorrowedFd::borrow_raw(0) }
395+
}
396+
}
397+
398+
#[stable(feature = "io_safety", since = "1.63.0")]
399+
impl<'a> AsFd for io::StdinLock<'a> {
400+
#[inline]
401+
fn as_fd(&self) -> BorrowedFd<'_> {
402+
// SAFETY: user code should not close stdin out from under the standard library
403+
unsafe { BorrowedFd::borrow_raw(0) }
404+
}
405+
}
406+
407+
#[stable(feature = "io_safety", since = "1.63.0")]
408+
impl AsFd for io::Stdout {
409+
#[inline]
410+
fn as_fd(&self) -> BorrowedFd<'_> {
411+
unsafe { BorrowedFd::borrow_raw(1) }
412+
}
413+
}
414+
415+
#[stable(feature = "io_safety", since = "1.63.0")]
416+
impl<'a> AsFd for io::StdoutLock<'a> {
417+
#[inline]
418+
fn as_fd(&self) -> BorrowedFd<'_> {
419+
// SAFETY: user code should not close stdout out from under the standard library
420+
unsafe { BorrowedFd::borrow_raw(1) }
421+
}
422+
}
423+
424+
#[stable(feature = "io_safety", since = "1.63.0")]
425+
impl AsFd for io::Stderr {
426+
#[inline]
427+
fn as_fd(&self) -> BorrowedFd<'_> {
428+
unsafe { BorrowedFd::borrow_raw(2) }
429+
}
430+
}
431+
432+
#[stable(feature = "io_safety", since = "1.63.0")]
433+
impl<'a> AsFd for io::StderrLock<'a> {
434+
#[inline]
435+
fn as_fd(&self) -> BorrowedFd<'_> {
436+
// SAFETY: user code should not close stderr out from under the standard library
437+
unsafe { BorrowedFd::borrow_raw(2) }
438+
}
439+
}

library/std/src/sys/unix/stdio.rs

+1-49
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::io::{self, IoSlice, IoSliceMut};
22
use crate::mem::ManuallyDrop;
3-
use crate::os::unix::io::{AsFd, BorrowedFd, FromRawFd};
3+
use crate::os::unix::io::FromRawFd;
44
use crate::sys::fd::FileDesc;
55

66
pub struct Stdin(());
@@ -91,51 +91,3 @@ pub const STDIN_BUF_SIZE: usize = crate::sys_common::io::DEFAULT_BUF_SIZE;
9191
pub fn panic_output() -> Option<impl io::Write> {
9292
Some(Stderr::new())
9393
}
94-
95-
#[stable(feature = "io_safety", since = "1.63.0")]
96-
impl AsFd for io::Stdin {
97-
#[inline]
98-
fn as_fd(&self) -> BorrowedFd<'_> {
99-
unsafe { BorrowedFd::borrow_raw(libc::STDIN_FILENO) }
100-
}
101-
}
102-
103-
#[stable(feature = "io_safety", since = "1.63.0")]
104-
impl<'a> AsFd for io::StdinLock<'a> {
105-
#[inline]
106-
fn as_fd(&self) -> BorrowedFd<'_> {
107-
unsafe { BorrowedFd::borrow_raw(libc::STDIN_FILENO) }
108-
}
109-
}
110-
111-
#[stable(feature = "io_safety", since = "1.63.0")]
112-
impl AsFd for io::Stdout {
113-
#[inline]
114-
fn as_fd(&self) -> BorrowedFd<'_> {
115-
unsafe { BorrowedFd::borrow_raw(libc::STDOUT_FILENO) }
116-
}
117-
}
118-
119-
#[stable(feature = "io_safety", since = "1.63.0")]
120-
impl<'a> AsFd for io::StdoutLock<'a> {
121-
#[inline]
122-
fn as_fd(&self) -> BorrowedFd<'_> {
123-
unsafe { BorrowedFd::borrow_raw(libc::STDOUT_FILENO) }
124-
}
125-
}
126-
127-
#[stable(feature = "io_safety", since = "1.63.0")]
128-
impl AsFd for io::Stderr {
129-
#[inline]
130-
fn as_fd(&self) -> BorrowedFd<'_> {
131-
unsafe { BorrowedFd::borrow_raw(libc::STDERR_FILENO) }
132-
}
133-
}
134-
135-
#[stable(feature = "io_safety", since = "1.63.0")]
136-
impl<'a> AsFd for io::StderrLock<'a> {
137-
#[inline]
138-
fn as_fd(&self) -> BorrowedFd<'_> {
139-
unsafe { BorrowedFd::borrow_raw(libc::STDERR_FILENO) }
140-
}
141-
}

library/std/src/sys/wasi/stdio.rs

+1-49
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use super::fd::WasiFd;
44
use crate::io::{self, IoSlice, IoSliceMut};
55
use crate::mem::ManuallyDrop;
66
use crate::os::raw;
7-
use crate::os::wasi::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd};
7+
use crate::os::wasi::io::{AsRawFd, FromRawFd};
88

99
pub struct Stdin;
1010
pub struct Stdout;
@@ -23,22 +23,6 @@ impl AsRawFd for Stdin {
2323
}
2424
}
2525

26-
impl AsFd for Stdin {
27-
#[inline]
28-
fn as_fd(&self) -> BorrowedFd<'_> {
29-
unsafe { BorrowedFd::borrow_raw(0) }
30-
}
31-
}
32-
33-
#[stable(feature = "io_safety", since = "1.63.0")]
34-
impl<'a> AsFd for io::StdinLock<'a> {
35-
#[inline]
36-
fn as_fd(&self) -> BorrowedFd<'_> {
37-
// SAFETY: user code should not close stdin out from under the standard library
38-
unsafe { BorrowedFd::borrow_raw(0) }
39-
}
40-
}
41-
4226
impl io::Read for Stdin {
4327
fn read(&mut self, data: &mut [u8]) -> io::Result<usize> {
4428
self.read_vectored(&mut [IoSliceMut::new(data)])
@@ -67,22 +51,6 @@ impl AsRawFd for Stdout {
6751
}
6852
}
6953

70-
impl AsFd for Stdout {
71-
#[inline]
72-
fn as_fd(&self) -> BorrowedFd<'_> {
73-
unsafe { BorrowedFd::borrow_raw(1) }
74-
}
75-
}
76-
77-
#[stable(feature = "io_safety", since = "1.63.0")]
78-
impl<'a> AsFd for io::StdoutLock<'a> {
79-
#[inline]
80-
fn as_fd(&self) -> BorrowedFd<'_> {
81-
// SAFETY: user code should not close stdout out from under the standard library
82-
unsafe { BorrowedFd::borrow_raw(1) }
83-
}
84-
}
85-
8654
impl io::Write for Stdout {
8755
fn write(&mut self, data: &[u8]) -> io::Result<usize> {
8856
self.write_vectored(&[IoSlice::new(data)])
@@ -114,22 +82,6 @@ impl AsRawFd for Stderr {
11482
}
11583
}
11684

117-
impl AsFd for Stderr {
118-
#[inline]
119-
fn as_fd(&self) -> BorrowedFd<'_> {
120-
unsafe { BorrowedFd::borrow_raw(2) }
121-
}
122-
}
123-
124-
#[stable(feature = "io_safety", since = "1.63.0")]
125-
impl<'a> AsFd for io::StderrLock<'a> {
126-
#[inline]
127-
fn as_fd(&self) -> BorrowedFd<'_> {
128-
// SAFETY: user code should not close stderr out from under the standard library
129-
unsafe { BorrowedFd::borrow_raw(2) }
130-
}
131-
}
132-
13385
impl io::Write for Stderr {
13486
fn write(&mut self, data: &[u8]) -> io::Result<usize> {
13587
self.write_vectored(&[IoSlice::new(data)])

0 commit comments

Comments
 (0)