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::io;
|
||||||
use crate::sys::anonymous_pipe::{AnonPipe, pipe as pipe_inner};
|
use crate::sys::anonymous_pipe::{AnonPipe, pipe as pipe_inner};
|
||||||
|
use crate::sys_common::{FromInner, IntoInner};
|
||||||
|
|
||||||
/// Create an anonymous pipe.
|
/// Create an anonymous pipe.
|
||||||
///
|
///
|
||||||
|
@ -82,6 +83,30 @@ pub struct PipeReader(pub(crate) AnonPipe);
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct PipeWriter(pub(crate) AnonPipe);
|
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 {
|
impl PipeReader {
|
||||||
/// Create a new [`PipeReader`] instance that shares the same underlying file description.
|
/// Create a new [`PipeReader`] instance that shares the same underlying file description.
|
||||||
///
|
///
|
||||||
|
|
|
@ -15,8 +15,9 @@ use crate::mem::ManuallyDrop;
|
||||||
target_os = "trusty"
|
target_os = "trusty"
|
||||||
)))]
|
)))]
|
||||||
use crate::sys::cvt;
|
use crate::sys::cvt;
|
||||||
|
use crate::sys_common::FromInner;
|
||||||
#[cfg(not(target_os = "trusty"))]
|
#[cfg(not(target_os = "trusty"))]
|
||||||
use crate::sys_common::{AsInner, FromInner, IntoInner};
|
use crate::sys_common::{AsInner, IntoInner};
|
||||||
use crate::{fmt, io};
|
use crate::{fmt, io};
|
||||||
|
|
||||||
type ValidRawFd = core::num::niche_types::NotAllOnes<RawFd>;
|
type ValidRawFd = core::num::niche_types::NotAllOnes<RawFd>;
|
||||||
|
@ -504,3 +505,45 @@ impl<'a> AsFd for io::StderrLock<'a> {
|
||||||
unsafe { BorrowedFd::borrow_raw(2) }
|
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;
|
use crate::os::unix::io::OwnedFd;
|
||||||
#[cfg(target_os = "wasi")]
|
#[cfg(target_os = "wasi")]
|
||||||
use crate::os::wasi::io::OwnedFd;
|
use crate::os::wasi::io::OwnedFd;
|
||||||
|
use crate::sys_common::FromInner;
|
||||||
#[cfg(not(target_os = "trusty"))]
|
#[cfg(not(target_os = "trusty"))]
|
||||||
use crate::sys_common::{AsInner, IntoInner};
|
use crate::sys_common::{AsInner, IntoInner};
|
||||||
|
|
||||||
|
@ -284,3 +285,45 @@ impl<T: AsRawFd> AsRawFd for Box<T> {
|
||||||
(**self).as_raw_fd()
|
(**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()
|
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()
|
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.
|
/// 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.
|
/// 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::io;
|
||||||
use crate::os::fd::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
|
|
||||||
use crate::process::Stdio;
|
|
||||||
use crate::sys::fd::FileDesc;
|
use crate::sys::fd::FileDesc;
|
||||||
use crate::sys::pipe::anon_pipe;
|
use crate::sys::pipe::anon_pipe;
|
||||||
use crate::sys_common::{FromInner, IntoInner};
|
use crate::sys_common::IntoInner;
|
||||||
|
|
||||||
pub type AnonPipe = FileDesc;
|
pub type AnonPipe = FileDesc;
|
||||||
|
|
||||||
|
@ -11,91 +9,3 @@ pub type AnonPipe = FileDesc;
|
||||||
pub fn pipe() -> io::Result<(AnonPipe, AnonPipe)> {
|
pub fn pipe() -> io::Result<(AnonPipe, AnonPipe)> {
|
||||||
anon_pipe().map(|(rx, wx)| (rx.into_inner(), wx.into_inner()))
|
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::io;
|
||||||
use crate::process::Stdio;
|
|
||||||
pub use crate::sys::pipe::AnonPipe;
|
pub use crate::sys::pipe::AnonPipe;
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn pipe() -> io::Result<(AnonPipe, AnonPipe)> {
|
pub fn pipe() -> io::Result<(AnonPipe, AnonPipe)> {
|
||||||
Err(io::Error::UNSUPPORTED_PLATFORM)
|
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::FromRawHandle;
|
||||||
use crate::os::windows::io::{
|
|
||||||
AsHandle, AsRawHandle, BorrowedHandle, FromRawHandle, IntoRawHandle, OwnedHandle, RawHandle,
|
|
||||||
};
|
|
||||||
use crate::process::Stdio;
|
|
||||||
use crate::ptr;
|
|
||||||
use crate::sys::c;
|
use crate::sys::c;
|
||||||
use crate::sys::handle::Handle;
|
use crate::sys::handle::Handle;
|
||||||
use crate::sys_common::{FromInner, IntoInner};
|
use crate::{io, ptr};
|
||||||
|
|
||||||
pub type AnonPipe = Handle;
|
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))) }
|
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 {
|
impl From<File> for Stdio {
|
||||||
fn from(file: File) -> Stdio {
|
fn from(file: File) -> Stdio {
|
||||||
Stdio::Fd(file.into_inner())
|
Stdio::Fd(file.into_inner())
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use crate::fmt;
|
use crate::fmt;
|
||||||
use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut};
|
use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut};
|
||||||
|
use crate::sys_common::{FromInner, IntoInner};
|
||||||
|
|
||||||
pub struct AnonPipe(!);
|
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<()> {
|
pub fn read2(p1: AnonPipe, _v1: &mut Vec<u8>, _p2: AnonPipe, _v2: &mut Vec<u8>) -> io::Result<()> {
|
||||||
match p1.0 {}
|
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 {
|
impl From<File> for Stdio {
|
||||||
fn from(file: File) -> Stdio {
|
fn from(file: File) -> Stdio {
|
||||||
Stdio::Handle(file.into_inner())
|
Stdio::Handle(file.into_inner())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue