diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2022-11-23 08:45:53 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2022-11-23 08:56:41 +0200 |
commit | 4b3718646a22fdaeab9088ed30dfe88e42cc215b (patch) | |
tree | 548f269fb0ec59c31ad46adedcc99663f3c97f9a /libbutl/process.ixx | |
parent | b598f20fa916b389ea5a18837f1eac4a408856e6 (diff) |
Add some more process constructor overloads
Diffstat (limited to 'libbutl/process.ixx')
-rw-r--r-- | libbutl/process.ixx | 103 |
1 files changed, 95 insertions, 8 deletions
diff --git a/libbutl/process.ixx b/libbutl/process.ixx index a346a5d..9753d22 100644 --- a/libbutl/process.ixx +++ b/libbutl/process.ixx @@ -214,11 +214,7 @@ namespace butl inline process:: process (optional<process_exit> e) - : handle (0), - exit (std::move (e)), - out_fd (-1), - in_ofd (-1), - in_efd (-1) + : handle (0), exit (std::move (e)) { } @@ -268,6 +264,28 @@ namespace butl } inline process:: + process (const char** args, + pipe in, pipe out, pipe err, + const char* cwd, + const char* const* envvars) + : process (path_search (args[0]), args, + std::move (in), std::move (out), std::move (err), + cwd, envvars) + { + } + + inline process:: + process (const char** args, + int in, int out, pipe err, + const char* cwd, + const char* const* envvars) + : process (path_search (args[0]), args, + pipe (in, -1), pipe (-1, out), std::move (err), + cwd, envvars) + { + } + + inline process:: process (const process_path& pp, const char* const* args, int in, int out, pipe err, const char* cwd, @@ -280,6 +298,30 @@ namespace butl } inline process:: + process (std::vector<const char*>& args, + pipe in, pipe out, pipe err, + const char* cwd, + const char* const* envvars) + : process (path_search (args[0]), args.data (), + std::move (in), std::move (out), std::move (err), + cwd, + envvars) + { + } + + inline process:: + process (std::vector<const char*>& args, + int in, int out, pipe err, + const char* cwd, + const char* const* envvars) + : process (path_search (args[0]), args.data (), + pipe (in, -1), pipe (-1, out), std::move (err), + cwd, + envvars) + { + } + + inline process:: process (const process_path& pp, const std::vector<const char*>& args, pipe in, pipe out, pipe err, const char* cwd, @@ -305,13 +347,27 @@ namespace butl inline process:: process (const process_path& pp, const char* const* args, + process& in, pipe out, pipe err, + const char* cwd, + const char* const* envvars) + : process (pp, args, + [&in] () + { + assert (in.in_ofd != nullfd); // Should be a pipe. + return process::pipe (std::move (in.in_ofd), -1); + } (), + std::move (out), std::move (err), + cwd, envvars) + { + } + + inline process:: + process (const process_path& pp, const char* const* args, process& in, int out, int err, const char* cwd, const char* const* envvars) - : process (pp, args, in.in_ofd.get (), out, err, cwd, envvars) + : process (pp, args, in, pipe (-1, out), pipe (-1, err), cwd, envvars) { - assert (in.in_ofd.get () != -1); // Should be a pipe. - in.in_ofd.reset (); // Close it on our side. } inline process:: @@ -324,6 +380,37 @@ namespace butl } inline process:: + process (const char** args, + process& in, pipe out, pipe err, + const char* cwd, + const char* const* envvars) + : process (path_search (args[0]), args, + in, std::move (out), std::move (err), + cwd, envvars) + { + } + + inline process:: + process (const char** args, + process& in, int out, pipe err, + const char* cwd, + const char* const* envvars) + : process (path_search (args[0]), args, + in, pipe (-1, out), std::move (err), + cwd, envvars) + { + } + + inline process:: + process (const process_path& pp, const char* const* args, + process& in, int out, pipe err, + const char* cwd, + const char* const* envvars) + : process (pp, args, in, pipe (-1, out), std::move (err), cwd, envvars) + { + } + + inline process:: process (process&& p) : handle (p.handle), exit (std::move (p.exit)), |