Skip to content

Commit

Permalink
add FromOwnedFd/FromOwnedHandle for ChildStdin/out/err
Browse files Browse the repository at this point in the history
  • Loading branch information
vthib committed May 30, 2023
1 parent 3266c36 commit 7ebbdc6
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 2 deletions.
30 changes: 30 additions & 0 deletions library/std/src/os/unix/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,16 @@ impl From<crate::process::ChildStdin> for OwnedFd {
}
}

#[stable(feature = "io_safety", since = "1.63.0")]
impl From<OwnedFd> for process::ChildStdin {
#[inline]
fn from(fd: OwnedFd) -> process::ChildStdin {
let fd = sys::fd::FileDesc::from_inner(fd);
let pipe = sys::pipe::AnonPipe::from_inner(fd);
process::ChildStdin::from_inner(pipe)
}
}

#[stable(feature = "io_safety", since = "1.63.0")]
impl AsFd for crate::process::ChildStdout {
#[inline]
Expand All @@ -450,6 +460,16 @@ impl From<crate::process::ChildStdout> for OwnedFd {
}
}

#[stable(feature = "io_safety", since = "1.63.0")]
impl From<OwnedFd> for process::ChildStdout {
#[inline]
fn from(fd: OwnedFd) -> process::ChildStdout {
let fd = sys::fd::FileDesc::from_inner(fd);
let pipe = sys::pipe::AnonPipe::from_inner(fd);
process::ChildStdout::from_inner(pipe)
}
}

#[stable(feature = "io_safety", since = "1.63.0")]
impl AsFd for crate::process::ChildStderr {
#[inline]
Expand All @@ -466,6 +486,16 @@ impl From<crate::process::ChildStderr> for OwnedFd {
}
}

#[stable(feature = "io_safety", since = "1.63.0")]
impl From<OwnedFd> for process::ChildStderr {
#[inline]
fn from(fd: OwnedFd) -> process::ChildStderr {
let fd = sys::fd::FileDesc::from_inner(fd);
let pipe = sys::pipe::AnonPipe::from_inner(fd);
process::ChildStderr::from_inner(pipe)
}
}

/// Returns the OS-assigned process identifier associated with this process's parent.
#[must_use]
#[stable(feature = "unix_ppid", since = "1.27.0")]
Expand Down
27 changes: 27 additions & 0 deletions library/std/src/os/windows/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,33 @@ impl IntoRawHandle for process::ChildStderr {
}
}

#[stable(feature = "io_safety", since = "1.63.0")]
impl From<OwnedHandle> for process::ChildStdin {
fn from(handle: OwnedHandle) -> process::ChildStdin {
let handle = sys::handle::Handle::from_inner(handle);
let pipe = sys::pipe::AnonPipe::from_inner(handle);
process::ChildStdin::from_inner(pipe)
}
}

#[stable(feature = "io_safety", since = "1.63.0")]
impl From<OwnedHandle> for process::ChildStdout {
fn from(handle: OwnedHandle) -> process::ChildStdout {
let handle = sys::handle::Handle::from_inner(handle);
let pipe = sys::pipe::AnonPipe::from_inner(handle);
process::ChildStdout::from_inner(pipe)
}
}

#[stable(feature = "io_safety", since = "1.63.0")]
impl From<OwnedHandle> for process::ChildStderr {
fn from(handle: OwnedHandle) -> process::ChildStderr {
let handle = sys::handle::Handle::from_inner(handle);
let pipe = sys::pipe::AnonPipe::from_inner(handle);
process::ChildStderr::from_inner(pipe)
}
}

/// Windows-specific extensions to [`process::ExitStatus`].
///
/// This trait is sealed: it cannot be implemented outside the standard library.
Expand Down
8 changes: 7 additions & 1 deletion library/std/src/sys/unix/pipe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use crate::mem;
use crate::os::unix::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, RawFd};
use crate::sys::fd::FileDesc;
use crate::sys::{cvt, cvt_r};
use crate::sys_common::IntoInner;
use crate::sys_common::{FromInner, IntoInner};

////////////////////////////////////////////////////////////////////////////////
// Anonymous pipes
Expand Down Expand Up @@ -158,3 +158,9 @@ impl FromRawFd for AnonPipe {
Self(FromRawFd::from_raw_fd(raw_fd))
}
}

impl FromInner<FileDesc> for AnonPipe {
fn from_inner(fd: FileDesc) -> Self {
Self(fd)
}
}
8 changes: 7 additions & 1 deletion library/std/src/sys/windows/pipe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use crate::sys::c;
use crate::sys::fs::{File, OpenOptions};
use crate::sys::handle::Handle;
use crate::sys::hashmap_random_keys;
use crate::sys_common::IntoInner;
use crate::sys_common::{FromInner, IntoInner};

////////////////////////////////////////////////////////////////////////////////
// Anonymous pipes
Expand All @@ -28,6 +28,12 @@ impl IntoInner<Handle> for AnonPipe {
}
}

impl FromInner<Handle> for AnonPipe {
fn from_inner(inner: Handle) -> AnonPipe {
Self { inner }
}
}

pub struct Pipes {
pub ours: AnonPipe,
pub theirs: AnonPipe,
Expand Down

0 comments on commit 7ebbdc6

Please sign in to comment.