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:
eldritch horrors
2024-07-05 22:28:16 +00:00
parent f4f6d1d8e2
commit b6a08a2fed
5 changed files with 43 additions and 12 deletions
+18 -1
View File
@@ -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
{