aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/cru/common/SubProcess.h6
-rw-r--r--include/cru/common/platform/unix/PosixSpawnSubProcess.h8
-rw-r--r--src/common/platform/unix/PosixSpawnSubProcess.cpp19
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() {}