aboutsummaryrefslogtreecommitdiff
path: root/src/io/stdin.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/io/stdin.rs')
-rw-r--r--src/io/stdin.rs35
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()) }
+ }
}
}