From 9debe91675222782e08fbb15bb6359a05bf85131 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Tue, 6 Jun 2017 15:42:55 -0700 Subject: Add conversions from File and Child* handles to Stdio `Stdio` now implements `From`, `From`, `From`, and `From`. The `Command::stdin`/`stdout`/`stderr` methods now take any type that implements `Into`. This makes it much easier to write shell-like command chains, piping to one another and redirecting to and from files. Otherwise one would need to use the unsafe and OS-specific `from_raw_fd` or `from_raw_handle`. --- src/libstd/sys/redox/process.rs | 12 ++++++++++++ src/libstd/sys/unix/process/process_common.rs | 12 ++++++++++++ src/libstd/sys/windows/process.rs | 12 ++++++++++++ 3 files changed, 36 insertions(+) (limited to 'src/libstd/sys') diff --git a/src/libstd/sys/redox/process.rs b/src/libstd/sys/redox/process.rs index 95e9438cd71..62d873d257d 100644 --- a/src/libstd/sys/redox/process.rs +++ b/src/libstd/sys/redox/process.rs @@ -400,6 +400,18 @@ impl Stdio { } } +impl From for Stdio { + fn from(pipe: AnonPipe) -> Stdio { + Stdio::Fd(pipe.into_fd()) + } +} + +impl From for Stdio { + fn from(file: File) -> Stdio { + Stdio::Fd(file.into_fd()) + } +} + impl ChildStdio { fn fd(&self) -> Option { match *self { diff --git a/src/libstd/sys/unix/process/process_common.rs b/src/libstd/sys/unix/process/process_common.rs index e9f41009064..32fcee1e461 100644 --- a/src/libstd/sys/unix/process/process_common.rs +++ b/src/libstd/sys/unix/process/process_common.rs @@ -315,6 +315,18 @@ impl Stdio { } } +impl From for Stdio { + fn from(pipe: AnonPipe) -> Stdio { + Stdio::Fd(pipe.into_fd()) + } +} + +impl From for Stdio { + fn from(file: File) -> Stdio { + Stdio::Fd(file.into_fd()) + } +} + impl ChildStdio { pub fn fd(&self) -> Option { match *self { diff --git a/src/libstd/sys/windows/process.rs b/src/libstd/sys/windows/process.rs index 0bd0ce73138..0d1766d5aec 100644 --- a/src/libstd/sys/windows/process.rs +++ b/src/libstd/sys/windows/process.rs @@ -306,6 +306,18 @@ impl Stdio { } } +impl From for Stdio { + fn from(pipe: AnonPipe) -> Stdio { + Stdio::Handle(pipe.into_handle()) + } +} + +impl From for Stdio { + fn from(file: File) -> Stdio { + Stdio::Handle(file.into_handle()) + } +} + //////////////////////////////////////////////////////////////////////////////// // Processes //////////////////////////////////////////////////////////////////////////////// -- cgit 1.4.1-3-g733a5