diff options
Diffstat (limited to 'src/io/stdin.rs')
-rw-r--r-- | src/io/stdin.rs | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/src/io/stdin.rs b/src/io/stdin.rs index c9578f1..640cb0b 100644 --- a/src/io/stdin.rs +++ b/src/io/stdin.rs @@ -49,16 +49,37 @@ cfg_io_std! { } #[cfg(unix)] -impl std::os::unix::io::AsRawFd for Stdin { - fn as_raw_fd(&self) -> std::os::unix::io::RawFd { - std::io::stdin().as_raw_fd() +mod sys { + use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, RawFd}; + + use super::Stdin; + + impl AsRawFd for Stdin { + fn as_raw_fd(&self) -> RawFd { + std::io::stdin().as_raw_fd() + } + } + + impl AsFd for Stdin { + fn as_fd(&self) -> BorrowedFd<'_> { + unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) } + } } } -#[cfg(windows)] -impl std::os::windows::io::AsRawHandle for Stdin { - fn as_raw_handle(&self) -> std::os::windows::io::RawHandle { - std::io::stdin().as_raw_handle() +cfg_windows! { + use crate::os::windows::io::{AsHandle, BorrowedHandle, AsRawHandle, RawHandle}; + + impl AsRawHandle for Stdin { + fn as_raw_handle(&self) -> RawHandle { + std::io::stdin().as_raw_handle() + } + } + + impl AsHandle for Stdin { + fn as_handle(&self) -> BorrowedHandle<'_> { + unsafe { BorrowedHandle::borrow_raw(self.as_raw_handle()) } + } } } |