diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-12-17 23:44:26 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-17 23:44:26 +0100 |
| commit | 6d1cdcaee52e357dfb3500091bdd18a2e0c763ff (patch) | |
| tree | 8c77db364a89edb08e1552ac86b4d74a6baae5a1 /library/std/src/sys/unix/pipe.rs | |
| parent | 5dc0b6ff6d76cefa32b1393800067c743f163dcc (diff) | |
| parent | a94793d8d17e4cfe2e727c30c36e174b8d6b6ee3 (diff) | |
| download | rust-6d1cdcaee52e357dfb3500091bdd18a2e0c763ff.tar.gz rust-6d1cdcaee52e357dfb3500091bdd18a2e0c763ff.zip | |
Rollup merge of #105458 - Ayush1325:blocking_spawn, r=Mark-Simulacrum
Allow blocking `Command::output` ### Problem Currently, `Command::output` is internally implemented using `Command::spawn`. This is problematic because some targets (like UEFI) do not actually support multitasking and thus block while the program is executing. This coupling does not make much sense as `Command::output` is supposed to block until the execution is complete anyway and thus does not need to rely on a non-blocking `Child` or any other intermediate. ### Solution This PR moves the implementation of `Command::output` to `std::sys`. This means targets can choose to implement only `Command::output` without having to implement `Command::spawn`. ### Additional Information This was originally conceived when working on https://github.com/rust-lang/rust/pull/100316. Currently, the only target I know about that will benefit from this change is UEFI. This PR can also be used to implement more efficient `Command::output` since the intermediate `Process` is not actually needed anymore, but that is outside the scope of this PR. Since this is not a public API change, I'm not sure if an RFC is needed or not.
Diffstat (limited to 'library/std/src/sys/unix/pipe.rs')
| -rw-r--r-- | library/std/src/sys/unix/pipe.rs | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/library/std/src/sys/unix/pipe.rs b/library/std/src/sys/unix/pipe.rs index a56c275c942..a744d0ab640 100644 --- a/library/std/src/sys/unix/pipe.rs +++ b/library/std/src/sys/unix/pipe.rs @@ -58,6 +58,10 @@ impl AnonPipe { self.0.is_read_vectored() } + pub fn read_to_end(&self, buf: &mut Vec<u8>) -> io::Result<usize> { + self.0.read_to_end(buf) + } + pub fn write(&self, buf: &[u8]) -> io::Result<usize> { self.0.write(buf) } |
