Skip to content

Commit

Permalink
Rollup merge of #97150 - ChrisDenton:stdio-create_pipe, r=m-ou-se
Browse files Browse the repository at this point in the history
`Stdio::makes_pipe`

Wrappers around `std::process::Command` may want to be able to override pipe creation. However, [`std::process::Stdio`](https://doc.rust-lang.org/std/process/struct.Stdio.html) is opaque so there's no way to tell if `Command` was told to create new pipes or not.

This is in some ways a more generic (and cross-platform) alternative to #97149. However, unlike that feature, this comes with the price of the user needing to actually create their own pipes rather than reusing the std one. So I think it stands (or not) on its own.

# Example

```rust
#![feature(stdio_makes_pipe)]
use std::process::Stdio;

let io = Stdio::piped();
assert_eq!(io.makes_pipe(), true);
```
  • Loading branch information
Dylan-DPC authored Jun 20, 2022
2 parents 85f1de2 + 8b93147 commit 2807f28
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions library/std/src/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1273,6 +1273,22 @@ impl Stdio {
pub fn null() -> Stdio {
Stdio(imp::Stdio::Null)
}

/// Returns `true` if this requires [`Command`] to create a new pipe.
///
/// # Example
///
/// ```
/// #![feature(stdio_makes_pipe)]
/// use std::process::Stdio;
///
/// let io = Stdio::piped();
/// assert_eq!(io.makes_pipe(), true);
/// ```
#[unstable(feature = "stdio_makes_pipe", issue = "98288")]
pub fn makes_pipe(&self) -> bool {
matches!(self.0, imp::Stdio::MakePipe)
}
}

impl FromInner<imp::Stdio> for Stdio {
Expand Down

0 comments on commit 2807f28

Please sign in to comment.