diff options
-rw-r--r-- | include/cru/common/SubProcess.h | 6 | ||||
-rw-r--r-- | include/cru/common/platform/unix/PosixSpawnSubProcess.h | 8 | ||||
-rw-r--r-- | src/common/platform/unix/PosixSpawnSubProcess.cpp | 19 |
3 files changed, 28 insertions, 5 deletions
diff --git a/include/cru/common/SubProcess.h b/include/cru/common/SubProcess.h index b31bc071..8e5e49f5 100644 --- a/include/cru/common/SubProcess.h +++ b/include/cru/common/SubProcess.h @@ -112,9 +112,9 @@ class PlatformSubProcessBase : public Object { */ PlatformSubProcessExitResult GetExitResult(); - io::Stream* GetStdinStream(); - io::Stream* GetStdoutStream(); - io::Stream* GetStderrStream(); + virtual io::Stream* GetStdinStream() = 0; + virtual io::Stream* GetStdoutStream() = 0; + virtual io::Stream* GetStderrStream() = 0; protected: /** diff --git a/include/cru/common/platform/unix/PosixSpawnSubProcess.h b/include/cru/common/platform/unix/PosixSpawnSubProcess.h index 0a0f0ad4..9a08daa6 100644 --- a/include/cru/common/platform/unix/PosixSpawnSubProcess.h +++ b/include/cru/common/platform/unix/PosixSpawnSubProcess.h @@ -5,6 +5,7 @@ #ifdef CRU_PLATFORM_UNIX #include "../../SubProcess.h" +#include "../../io/AutoReadStream.h" #include "UnixFileStream.h" #include "UnixPipe.h" @@ -17,6 +18,10 @@ class PosixSpawnSubProcess : public PlatformSubProcessBase { explicit PosixSpawnSubProcess(const PlatformSubProcessStartInfo& start_info); ~PosixSpawnSubProcess(); + io::Stream* GetStdinStream() override; + io::Stream* GetStdoutStream() override; + io::Stream* GetStderrStream() override; + protected: void PlatformCreateProcess() override; PlatformSubProcessExitResult PlatformWaitForProcess() override; @@ -33,6 +38,9 @@ class PosixSpawnSubProcess : public PlatformSubProcessBase { std::unique_ptr<UnixFileStream> stdin_stream_; std::unique_ptr<UnixFileStream> stdout_stream_; std::unique_ptr<UnixFileStream> stderr_stream_; + + std::unique_ptr<io::AutoReadStream> stdout_buffer_stream_; + std::unique_ptr<io::AutoReadStream> stderr_buffer_stream_; }; } // namespace cru::platform::unix diff --git a/src/common/platform/unix/PosixSpawnSubProcess.cpp b/src/common/platform/unix/PosixSpawnSubProcess.cpp index 7d5ba6e4..0eb5615d 100644 --- a/src/common/platform/unix/PosixSpawnSubProcess.cpp +++ b/src/common/platform/unix/PosixSpawnSubProcess.cpp @@ -19,14 +19,29 @@ PosixSpawnSubProcess::PosixSpawnSubProcess( stdout_pipe_.GetSelfFileDescriptor(), false, true, false, false); stderr_stream_ = std::make_unique<UnixFileStream>( stderr_pipe_.GetSelfFileDescriptor(), false, true, false, false); + + stdout_buffer_stream_ = + std::make_unique<io::AutoReadStream>(stdout_stream_.get(), false); + stderr_buffer_stream_ = + std::make_unique<io::AutoReadStream>(stdout_stream_.get(), false); } PosixSpawnSubProcess::~PosixSpawnSubProcess() {} -void PosixSpawnSubProcess::PlatformCreateProcess() { - +io::Stream* PosixSpawnSubProcess::GetStdinStream() { + return stdin_stream_.get(); +} + +io::Stream* PosixSpawnSubProcess::GetStdoutStream() { + return stdout_buffer_stream_.get(); } +io::Stream* PosixSpawnSubProcess::GetStderrStream() { + return stderr_buffer_stream_.get(); +} + +void PosixSpawnSubProcess::PlatformCreateProcess() {} + PlatformSubProcessExitResult PosixSpawnSubProcess::PlatformWaitForProcess() {} void PosixSpawnSubProcess::PlatformKillProcess() {} |