diff options
| author | Josh Triplett <josh@joshtriplett.org> | 2022-10-10 14:47:22 +0100 |
|---|---|---|
| committer | Josh Triplett <josh@joshtriplett.org> | 2022-10-10 14:47:22 +0100 |
| commit | ef68327de76d5f2bb6f9b2a6fa47b92fbf3ff7cc (patch) | |
| tree | 349c310f0de391ed80fee50eb5e4eeea396d44fc /library/std/src/os | |
| parent | 88bb4e4bda2e5ccafbc28ded2ef289841d5fb655 (diff) | |
| download | rust-ef68327de76d5f2bb6f9b2a6fa47b92fbf3ff7cc.tar.gz rust-ef68327de76d5f2bb6f9b2a6fa47b92fbf3ff7cc.zip | |
Consolidate AsFd instances for stdio types into `library/std/src/os/fd/owned.rs`
Diffstat (limited to 'library/std/src/os')
| -rw-r--r-- | library/std/src/os/fd/owned.rs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/library/std/src/os/fd/owned.rs b/library/std/src/os/fd/owned.rs index 9875c389d8a..9d758320cfc 100644 --- a/library/std/src/os/fd/owned.rs +++ b/library/std/src/os/fd/owned.rs @@ -6,6 +6,7 @@ use super::raw::{AsRawFd, FromRawFd, IntoRawFd, RawFd}; use crate::fmt; use crate::fs; +use crate::io; use crate::marker::PhantomData; use crate::mem::forget; #[cfg(not(any(target_arch = "wasm32", target_env = "sgx")))] @@ -385,3 +386,54 @@ impl<T: AsFd> AsFd for Box<T> { (**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) } + } +} |
