blob: 69f52d9c188ba7865e487bf1e2cfb83972feb54e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#include "cru/common/SubProcess.h"
#ifdef CRU_PLATFORM_UNIX
#include "cru/common/platform/unix/PosixSpawnSubProcess.h"
#endif
namespace cru {
#ifdef CRU_PLATFORM_UNIX
using ThisPlatformSubProcess = platform::unix::PosixSpawnSubProcess;
#endif
SubProcess SubProcess::Create(String program, std::vector<String> arguments,
std::unordered_map<String, String> environments) {
SubProcessStartInfo start_info;
start_info.program = std::move(program);
start_info.arguments = std::move(arguments);
start_info.environments = std::move(environments);
return SubProcess(std::move(start_info));
}
SubProcess::SubProcess(SubProcessStartInfo start_info) {
platform_process_.reset(new ThisPlatformSubProcess(std::move(start_info)));
platform_process_->Start();
}
SubProcess::~SubProcess() {}
void SubProcess::Wait(std::optional<std::chrono::milliseconds> wait_time) {
CheckValid();
platform_process_->Wait(wait_time);
}
void SubProcess::Kill() {
CheckValid();
platform_process_->Kill();
}
SubProcessStatus SubProcess::GetStatus() {
CheckValid();
return platform_process_->GetStatus();
}
SubProcessExitResult SubProcess::GetExitResult() {
CheckValid();
return platform_process_->GetExitResult();
}
io::Stream* SubProcess::GetStdinStream() {
CheckValid();
return platform_process_->GetStdinStream();
}
io::Stream* SubProcess::GetStdoutStream() {
CheckValid();
return platform_process_->GetStdoutStream();
}
io::Stream* SubProcess::GetStderrStream() {
CheckValid();
return platform_process_->GetStderrStream();
}
void SubProcess::Detach() { auto p = platform_process_.release(); }
void SubProcess::CheckValid() const {
if (!IsValid()) {
throw SubProcessException(u"SubProcess instance is invalid.");
}
}
} // namespace cru
|