libutil: return a program handle from runProgram2
this will let us also return a source for the program output later, which will in turn make sinkToSource unnecessary for program output processing. this may also reopen a path for provigin program input, but that still needs a proper async io framework to avoid problems. Change-Id: Iaf93f47db99c38cfaf134bd60ed6a804d7ddf688
This commit is contained in:
@@ -87,9 +87,26 @@ struct RunOptions
|
||||
bool isInteractive = false;
|
||||
};
|
||||
|
||||
struct [[nodiscard("you must call RunningProgram::wait()")]] RunningProgram
|
||||
{
|
||||
friend RunningProgram runProgram2(const RunOptions & options);
|
||||
|
||||
private:
|
||||
Path program;
|
||||
Pid pid;
|
||||
|
||||
RunningProgram(Path program, Pid pid) : program(std::move(program)), pid(std::move(pid)) {}
|
||||
|
||||
public:
|
||||
RunningProgram() = default;
|
||||
~RunningProgram();
|
||||
|
||||
void wait();
|
||||
};
|
||||
|
||||
std::pair<int, std::string> runProgram(RunOptions && options);
|
||||
|
||||
void runProgram2(const RunOptions & options);
|
||||
RunningProgram runProgram2(const RunOptions & options);
|
||||
|
||||
class ExecError : public Error
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user