Mv os-specific trait impl of Pipe*
into std::os::*
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
parent
340a45282a
commit
6863a99841
12 changed files with 278 additions and 208 deletions
|
@ -1,5 +1,6 @@
|
|||
use crate::io;
|
||||
use crate::sys::anonymous_pipe::{AnonPipe, pipe as pipe_inner};
|
||||
use crate::sys_common::{FromInner, IntoInner};
|
||||
|
||||
/// Create an anonymous pipe.
|
||||
///
|
||||
|
@ -82,6 +83,30 @@ pub struct PipeReader(pub(crate) AnonPipe);
|
|||
#[derive(Debug)]
|
||||
pub struct PipeWriter(pub(crate) AnonPipe);
|
||||
|
||||
impl FromInner<AnonPipe> for PipeReader {
|
||||
fn from_inner(inner: AnonPipe) -> Self {
|
||||
Self(inner)
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoInner<AnonPipe> for PipeReader {
|
||||
fn into_inner(self) -> AnonPipe {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl FromInner<AnonPipe> for PipeWriter {
|
||||
fn from_inner(inner: AnonPipe) -> Self {
|
||||
Self(inner)
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoInner<AnonPipe> for PipeWriter {
|
||||
fn into_inner(self) -> AnonPipe {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl PipeReader {
|
||||
/// Create a new [`PipeReader`] instance that shares the same underlying file description.
|
||||
///
|
||||
|
|
|
@ -15,8 +15,9 @@ use crate::mem::ManuallyDrop;
|
|||
target_os = "trusty"
|
||||
)))]
|
||||
use crate::sys::cvt;
|
||||
use crate::sys_common::FromInner;
|
||||
#[cfg(not(target_os = "trusty"))]
|
||||
use crate::sys_common::{AsInner, FromInner, IntoInner};
|
||||
use crate::sys_common::{AsInner, IntoInner};
|
||||
use crate::{fmt, io};
|
||||
|
||||
type ValidRawFd = core::num::niche_types::NotAllOnes<RawFd>;
|
||||
|
@ -504,3 +505,45 @@ impl<'a> AsFd for io::StderrLock<'a> {
|
|||
unsafe { BorrowedFd::borrow_raw(2) }
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsFd for io::PipeReader {
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.0.as_fd()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<io::PipeReader> for OwnedFd {
|
||||
fn from(pipe: io::PipeReader) -> Self {
|
||||
pipe.0.into_inner()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsFd for io::PipeWriter {
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.0.as_fd()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<io::PipeWriter> for OwnedFd {
|
||||
fn from(pipe: io::PipeWriter) -> Self {
|
||||
pipe.0.into_inner()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<OwnedFd> for io::PipeReader {
|
||||
fn from(owned_fd: OwnedFd) -> Self {
|
||||
Self(FromInner::from_inner(owned_fd))
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<OwnedFd> for io::PipeWriter {
|
||||
fn from(owned_fd: OwnedFd) -> Self {
|
||||
Self(FromInner::from_inner(owned_fd))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ use crate::os::unix::io::AsFd;
|
|||
use crate::os::unix::io::OwnedFd;
|
||||
#[cfg(target_os = "wasi")]
|
||||
use crate::os::wasi::io::OwnedFd;
|
||||
use crate::sys_common::FromInner;
|
||||
#[cfg(not(target_os = "trusty"))]
|
||||
use crate::sys_common::{AsInner, IntoInner};
|
||||
|
||||
|
@ -284,3 +285,45 @@ impl<T: AsRawFd> AsRawFd for Box<T> {
|
|||
(**self).as_raw_fd()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsRawFd for io::PipeReader {
|
||||
fn as_raw_fd(&self) -> RawFd {
|
||||
self.0.as_raw_fd()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl FromRawFd for io::PipeReader {
|
||||
unsafe fn from_raw_fd(raw_fd: RawFd) -> Self {
|
||||
Self::from_inner(unsafe { FromRawFd::from_raw_fd(raw_fd) })
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl IntoRawFd for io::PipeReader {
|
||||
fn into_raw_fd(self) -> RawFd {
|
||||
self.0.into_raw_fd()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsRawFd for io::PipeWriter {
|
||||
fn as_raw_fd(&self) -> RawFd {
|
||||
self.0.as_raw_fd()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl FromRawFd for io::PipeWriter {
|
||||
unsafe fn from_raw_fd(raw_fd: RawFd) -> Self {
|
||||
Self::from_inner(unsafe { FromRawFd::from_raw_fd(raw_fd) })
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl IntoRawFd for io::PipeWriter {
|
||||
fn into_raw_fd(self) -> RawFd {
|
||||
self.0.into_raw_fd()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -660,3 +660,45 @@ impl<T> From<crate::thread::JoinHandle<T>> for OwnedHandle {
|
|||
join_handle.into_inner().into_handle().into_inner()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsHandle for io::PipeReader {
|
||||
fn as_handle(&self) -> BorrowedHandle<'_> {
|
||||
self.0.as_handle()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<io::PipeReader> for OwnedHandle {
|
||||
fn from(pipe: io::PipeReader) -> Self {
|
||||
pipe.into_inner().into_inner()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsHandle for io::PipeWriter {
|
||||
fn as_handle(&self) -> BorrowedHandle<'_> {
|
||||
self.0.as_handle()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<io::PipeWriter> for OwnedHandle {
|
||||
fn from(pipe: io::PipeWriter) -> Self {
|
||||
pipe.into_inner().into_inner()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<OwnedHandle> for io::PipeReader {
|
||||
fn from(owned_handle: OwnedHandle) -> Self {
|
||||
Self::from_inner(FromInner::from_inner(owned_handle))
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<OwnedHandle> for io::PipeWriter {
|
||||
fn from(owned_handle: OwnedHandle) -> Self {
|
||||
Self::from_inner(FromInner::from_inner(owned_handle))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -310,3 +310,45 @@ impl IntoRawSocket for net::UdpSocket {
|
|||
self.into_inner().into_socket().into_inner().into_raw_socket()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsRawHandle for io::PipeReader {
|
||||
fn as_raw_handle(&self) -> RawHandle {
|
||||
self.0.as_raw_handle()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl FromRawHandle for io::PipeReader {
|
||||
unsafe fn from_raw_handle(raw_handle: RawHandle) -> Self {
|
||||
unsafe { Self::from_inner(FromRawHandle::from_raw_handle(raw_handle)) }
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl IntoRawHandle for io::PipeReader {
|
||||
fn into_raw_handle(self) -> RawHandle {
|
||||
self.0.into_raw_handle()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsRawHandle for io::PipeWriter {
|
||||
fn as_raw_handle(&self) -> RawHandle {
|
||||
self.0.as_raw_handle()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl FromRawHandle for io::PipeWriter {
|
||||
unsafe fn from_raw_handle(raw_handle: RawHandle) -> Self {
|
||||
unsafe { Self::from_inner(FromRawHandle::from_raw_handle(raw_handle)) }
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl IntoRawHandle for io::PipeWriter {
|
||||
fn into_raw_handle(self) -> RawHandle {
|
||||
self.0.into_raw_handle()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1659,6 +1659,20 @@ impl From<io::Stderr> for Stdio {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<io::PipeWriter> for Stdio {
|
||||
fn from(pipe: io::PipeWriter) -> Self {
|
||||
Stdio::from_inner(pipe.into_inner().into())
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<io::PipeReader> for Stdio {
|
||||
fn from(pipe: io::PipeReader) -> Self {
|
||||
Stdio::from_inner(pipe.into_inner().into())
|
||||
}
|
||||
}
|
||||
|
||||
/// Describes the result of a process after it has terminated.
|
||||
///
|
||||
/// This `struct` is used to represent the exit status or other termination of a child process.
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
use crate::io::{self, PipeReader, PipeWriter};
|
||||
use crate::os::fd::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
|
||||
use crate::process::Stdio;
|
||||
use crate::io;
|
||||
use crate::sys::fd::FileDesc;
|
||||
use crate::sys::pipe::anon_pipe;
|
||||
use crate::sys_common::{FromInner, IntoInner};
|
||||
use crate::sys_common::IntoInner;
|
||||
|
||||
pub type AnonPipe = FileDesc;
|
||||
|
||||
|
@ -11,91 +9,3 @@ pub type AnonPipe = FileDesc;
|
|||
pub fn pipe() -> io::Result<(AnonPipe, AnonPipe)> {
|
||||
anon_pipe().map(|(rx, wx)| (rx.into_inner(), wx.into_inner()))
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsFd for PipeReader {
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.0.as_fd()
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsRawFd for PipeReader {
|
||||
fn as_raw_fd(&self) -> RawFd {
|
||||
self.0.as_raw_fd()
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<PipeReader> for OwnedFd {
|
||||
fn from(pipe: PipeReader) -> Self {
|
||||
FileDesc::into_inner(pipe.0)
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl FromRawFd for PipeReader {
|
||||
unsafe fn from_raw_fd(raw_fd: RawFd) -> Self {
|
||||
unsafe { Self(FileDesc::from_raw_fd(raw_fd)) }
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl IntoRawFd for PipeReader {
|
||||
fn into_raw_fd(self) -> RawFd {
|
||||
self.0.into_raw_fd()
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<PipeReader> for Stdio {
|
||||
fn from(pipe: PipeReader) -> Self {
|
||||
Self::from(OwnedFd::from(pipe))
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsFd for PipeWriter {
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.0.as_fd()
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsRawFd for PipeWriter {
|
||||
fn as_raw_fd(&self) -> RawFd {
|
||||
self.0.as_raw_fd()
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<PipeWriter> for OwnedFd {
|
||||
fn from(pipe: PipeWriter) -> Self {
|
||||
FileDesc::into_inner(pipe.0)
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl FromRawFd for PipeWriter {
|
||||
unsafe fn from_raw_fd(raw_fd: RawFd) -> Self {
|
||||
unsafe { Self(FileDesc::from_raw_fd(raw_fd)) }
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl IntoRawFd for PipeWriter {
|
||||
fn into_raw_fd(self) -> RawFd {
|
||||
self.0.into_raw_fd()
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<PipeWriter> for Stdio {
|
||||
fn from(pipe: PipeWriter) -> Self {
|
||||
Self::from(OwnedFd::from(pipe))
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<OwnedFd> for PipeReader {
|
||||
fn from(owned_fd: OwnedFd) -> Self {
|
||||
Self(FileDesc::from_inner(owned_fd))
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<OwnedFd> for PipeWriter {
|
||||
fn from(owned_fd: OwnedFd) -> Self {
|
||||
Self(FileDesc::from_inner(owned_fd))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,22 +1,7 @@
|
|||
use crate::io::{self, PipeReader, PipeWriter};
|
||||
use crate::process::Stdio;
|
||||
use crate::io;
|
||||
pub use crate::sys::pipe::AnonPipe;
|
||||
|
||||
#[inline]
|
||||
pub fn pipe() -> io::Result<(AnonPipe, AnonPipe)> {
|
||||
Err(io::Error::UNSUPPORTED_PLATFORM)
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<PipeReader> for Stdio {
|
||||
fn from(pipe: PipeReader) -> Self {
|
||||
pipe.0.diverge()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<PipeWriter> for Stdio {
|
||||
fn from(pipe: PipeWriter) -> Self {
|
||||
pipe.0.diverge()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
use crate::io::{self, PipeReader, PipeWriter};
|
||||
use crate::os::windows::io::{
|
||||
AsHandle, AsRawHandle, BorrowedHandle, FromRawHandle, IntoRawHandle, OwnedHandle, RawHandle,
|
||||
};
|
||||
use crate::process::Stdio;
|
||||
use crate::ptr;
|
||||
use crate::os::windows::io::FromRawHandle;
|
||||
use crate::sys::c;
|
||||
use crate::sys::handle::Handle;
|
||||
use crate::sys_common::{FromInner, IntoInner};
|
||||
use crate::{io, ptr};
|
||||
|
||||
pub type AnonPipe = Handle;
|
||||
|
||||
|
@ -22,95 +17,3 @@ pub fn pipe() -> io::Result<(AnonPipe, AnonPipe)> {
|
|||
unsafe { Ok((Handle::from_raw_handle(read_pipe), Handle::from_raw_handle(write_pipe))) }
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsHandle for PipeReader {
|
||||
fn as_handle(&self) -> BorrowedHandle<'_> {
|
||||
self.0.as_handle()
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsRawHandle for PipeReader {
|
||||
fn as_raw_handle(&self) -> RawHandle {
|
||||
self.0.as_raw_handle()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl FromRawHandle for PipeReader {
|
||||
unsafe fn from_raw_handle(raw_handle: RawHandle) -> Self {
|
||||
unsafe { Self(Handle::from_raw_handle(raw_handle)) }
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl IntoRawHandle for PipeReader {
|
||||
fn into_raw_handle(self) -> RawHandle {
|
||||
self.0.into_raw_handle()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<PipeReader> for OwnedHandle {
|
||||
fn from(pipe: PipeReader) -> Self {
|
||||
Handle::into_inner(pipe.0)
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<PipeReader> for Stdio {
|
||||
fn from(pipe: PipeReader) -> Self {
|
||||
Self::from(OwnedHandle::from(pipe))
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsHandle for PipeWriter {
|
||||
fn as_handle(&self) -> BorrowedHandle<'_> {
|
||||
self.0.as_handle()
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl AsRawHandle for PipeWriter {
|
||||
fn as_raw_handle(&self) -> RawHandle {
|
||||
self.0.as_raw_handle()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl FromRawHandle for PipeWriter {
|
||||
unsafe fn from_raw_handle(raw_handle: RawHandle) -> Self {
|
||||
unsafe { Self(Handle::from_raw_handle(raw_handle)) }
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl IntoRawHandle for PipeWriter {
|
||||
fn into_raw_handle(self) -> RawHandle {
|
||||
self.0.into_raw_handle()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<PipeWriter> for OwnedHandle {
|
||||
fn from(pipe: PipeWriter) -> Self {
|
||||
Handle::into_inner(pipe.0)
|
||||
}
|
||||
}
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<PipeWriter> for Stdio {
|
||||
fn from(pipe: PipeWriter) -> Self {
|
||||
Self::from(OwnedHandle::from(pipe))
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<OwnedHandle> for PipeReader {
|
||||
fn from(owned_handle: OwnedHandle) -> Self {
|
||||
Self(Handle::from_inner(owned_handle))
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "anonymous_pipe", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl From<OwnedHandle> for PipeWriter {
|
||||
fn from(owned_handle: OwnedHandle) -> Self {
|
||||
Self(Handle::from_inner(owned_handle))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -491,6 +491,12 @@ impl From<AnonPipe> for Stdio {
|
|||
}
|
||||
}
|
||||
|
||||
impl From<FileDesc> for Stdio {
|
||||
fn from(fd: FileDesc) -> Stdio {
|
||||
Stdio::Fd(fd)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<File> for Stdio {
|
||||
fn from(file: File) -> Stdio {
|
||||
Stdio::Fd(file.into_inner())
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
use crate::fmt;
|
||||
use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut};
|
||||
use crate::sys_common::{FromInner, IntoInner};
|
||||
|
||||
pub struct AnonPipe(!);
|
||||
|
||||
|
@ -54,3 +55,53 @@ impl AnonPipe {
|
|||
pub fn read2(p1: AnonPipe, _v1: &mut Vec<u8>, _p2: AnonPipe, _v2: &mut Vec<u8>) -> io::Result<()> {
|
||||
match p1.0 {}
|
||||
}
|
||||
|
||||
impl FromInner<!> for AnonPipe {
|
||||
fn from_inner(inner: !) -> Self {
|
||||
inner
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoInner<!> for AnonPipe {
|
||||
fn into_inner(self) -> ! {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(unix, target_os = "hermit", target_os = "wasi"))]
|
||||
mod unix_traits {
|
||||
use super::AnonPipe;
|
||||
use crate::os::fd::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
|
||||
use crate::sys_common::FromInner;
|
||||
|
||||
impl AsRawFd for AnonPipe {
|
||||
#[inline]
|
||||
fn as_raw_fd(&self) -> RawFd {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl AsFd for AnonPipe {
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoRawFd for AnonPipe {
|
||||
fn into_raw_fd(self) -> RawFd {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl FromRawFd for AnonPipe {
|
||||
unsafe fn from_raw_fd(_: RawFd) -> Self {
|
||||
panic!("creating pipe on this platform is unsupported!")
|
||||
}
|
||||
}
|
||||
|
||||
impl FromInner<OwnedFd> for AnonPipe {
|
||||
fn from_inner(_: OwnedFd) -> Self {
|
||||
panic!("creating pipe on this platform is unsupported!")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -621,6 +621,12 @@ impl From<AnonPipe> for Stdio {
|
|||
}
|
||||
}
|
||||
|
||||
impl From<Handle> for Stdio {
|
||||
fn from(pipe: Handle) -> Stdio {
|
||||
Stdio::Handle(pipe)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<File> for Stdio {
|
||||
fn from(file: File) -> Stdio {
|
||||
Stdio::Handle(file.into_inner())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue