From aab30d19bf4e8dd7ecfeccab28ee5b23e3da3917 Mon Sep 17 00:00:00 2001 From: arunmu Date: Fri, 18 Mar 2016 17:06:44 +0530 Subject: [PATCH] Major issue resolved execv args was not terminated with nullptr --- main | Bin 128560 -> 128736 bytes subprocess.hpp | 38 +++++++++++++++++++++++++++++++++++--- test/test_subprocess.cc | 11 +++++++++-- 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/main b/main index be9f84c7f931198ac781f25b47b78015a0b79e05..b299c9723121baa8c8e2d21a400afb8eb2c47373 100755 GIT binary patch delta 14641 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 X$p7&iu;nqJCwLJ?*UJm=e5d~fLbmqE delta 14480 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 zIE}(args)...); + // Setup the communication channels of the Popen class + stream_.setup_comm_channels(); + if (!defer_process_start_) execute_process(); } @@ -551,6 +554,9 @@ public: vargs_.insert(vargs_.end(), cmd_args.begin(), cmd_args.end()); init_args(std::forward(args)...); + // Setup the communication channels of the Popen class + stream_.setup_comm_channels(); + if (!defer_process_start_) execute_process(); } @@ -640,8 +646,9 @@ void Popen::init_args(F&& farg, Args&&... args) void Popen::populate_c_argv() { - cargv_.reserve(vargs_.size()); + cargv_.reserve(vargs_.size() + 1); for (auto& arg : vargs_) cargv_.push_back(&arg[0]); + cargv_.push_back(nullptr); } void Popen::start_process() throw (CalledProcessError, OSError) @@ -767,8 +774,6 @@ void Popen::execute_process() throw (CalledProcessError, OSError) throw exp; } - // Setup the communication channels of the Popen class - stream_.setup_comm_channels(); } } @@ -1086,6 +1091,22 @@ namespace detail { return Popen(std::forward(farg), std::forward(args)...).wait(); } + + void pipeline_impl(std::vector& cmds) { /* EMPTY IMPL */ } + + template + void pipeline_impl(std::vector& cmds, + const std::string& cmd, + Args&&... args) + { + if (cmds.size() == 0) { + cmds.emplace_back(cmd, output{PIPE}, defer_spawn{true}); + } else { + cmds.emplace_back(cmd, input{cmds.back().output()}, output{PIPE}, defer_spawn{true}); + } + + pipeline_impl(cmds, std::forward(args)...); + } } @@ -1115,4 +1136,15 @@ OutBuffer check_output(const std::string& arg, Args&&... args) // Piping Support +template +// Args expected to be std::initializer_list +OutBuffer pipeline(Args&&... args) +{ + std::vector pcmds; + detail::pipeline_impl(pcmds, std::forward(args)...); + + for (auto& p : pcmds) p.start_process(); + return (pcmds.back().communicate().first); +} + }; diff --git a/test/test_subprocess.cc b/test/test_subprocess.cc index 2a2a8c3..2c35208 100755 --- a/test/test_subprocess.cc +++ b/test/test_subprocess.cc @@ -21,8 +21,15 @@ void test_piping() std::cout << res.buf.data() << std::endl; } +void test_easy_piping() +{ + auto res = pipeline("cat ../subprocess.hpp", "grep Args", "grep template"); + std::cout << res.buf.data() << std::endl; +} + int main() { - test_input(); - test_piping(); + //test_input(); + //test_piping(); + test_easy_piping(); return 0; }