aboutsummaryrefslogtreecommitdiff
path: root/vendor/cc/src/os_pipe.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/cc/src/os_pipe.rs')
-rw-r--r--vendor/cc/src/os_pipe.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/vendor/cc/src/os_pipe.rs b/vendor/cc/src/os_pipe.rs
new file mode 100644
index 0000000..218c9bc
--- /dev/null
+++ b/vendor/cc/src/os_pipe.rs
@@ -0,0 +1,28 @@
+//! Adapted from:
+//! - https://doc.rust-lang.org/src/std/sys/unix/pipe.rs.html
+//! - https://doc.rust-lang.org/src/std/sys/unix/fd.rs.html#385
+//! - https://github.com/rust-lang/rust/blob/master/library/std/src/sys/mod.rs#L57
+//! - https://github.com/oconnor663/os_pipe.rs
+use std::fs::File;
+
+/// Open a new pipe and return a pair of [`File`] objects for the reader and writer.
+///
+/// This corresponds to the `pipe2` library call on Posix and the
+/// `CreatePipe` library call on Windows (though these implementation
+/// details might change). These pipes are non-inheritable, so new child
+/// processes won't receive a copy of them unless they're explicitly
+/// passed as stdin/stdout/stderr.
+pub fn pipe() -> std::io::Result<(File, File)> {
+ sys::pipe()
+}
+
+#[cfg(unix)]
+#[path = "os_pipe/unix.rs"]
+mod sys;
+
+#[cfg(windows)]
+#[path = "os_pipe/windows.rs"]
+mod sys;
+
+#[cfg(all(not(unix), not(windows)))]
+compile_error!("Only unix and windows support os_pipe!");