From 9762f241aebddeb15c07c1beef152c5e6c322b47 Mon Sep 17 00:00:00 2001 From: arunmu Date: Sat, 19 Mar 2016 00:32:58 +0530 Subject: [PATCH] quite a few changes and added functionalities and tests --- main | Bin 128736 -> 138584 bytes subprocess.hpp | 94 +++++++++++++++++++++++++++++++++++++++- test/test_cat | Bin 118484 -> 129616 bytes test/test_cat.cc | 8 ++++ test/test_subprocess.cc | 7 +++ 5 files changed, 108 insertions(+), 1 deletion(-) diff --git a/main b/main index b299c9723121baa8c8e2d21a400afb8eb2c47373..e09238b140640a0ad5ee6d5cfdec4657d7776804 100755 GIT binary patch delta 40440 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 Tpx@Tme6p>6yV #include #include + #include } namespace subprocess { @@ -205,6 +206,16 @@ struct close_fds { bool close_all = false; }; +struct session_leader { + session_leader(bool sl): leader_(sl) {} + bool leader_ = false; +}; + +struct shell { + shell(bool s): shell_(s) {} + bool shell_ = false; +}; + struct string_arg { string_arg(const char* arg): arg_value(arg) {} @@ -308,6 +319,43 @@ struct error int wr_ch_ = -1; }; +// Impoverished, meager, needy, truly needy +// version of type erasure to store function pointers +// needed to provide the functionality of preexec_func +// ATTN: Can be used only to execute functions with no +// arguments and returning void. +// Could have used more efficient methods, ofcourse, but +// that wont yield me the consistent syntax which I am +// aiming for. If you know, then please do let me know. + +class preexec_func +{ +public: + preexec_func() {} + + template + preexec_func(Func f): holder_(new FuncHolder(f)) + {} + + void operator()() { + (*holder_)(); + } + +private: + struct HolderBase { + virtual void operator()() const; + }; + template + struct FuncHolder: HolderBase { + FuncHolder(T func): func_(func) {} + void operator()() const override {} + // The function pointer/reference + T func_; + }; + + std::unique_ptr holder_ = nullptr; +}; + // ~~~~ End Popen Args ~~~~ // @@ -382,10 +430,13 @@ struct ArgumentDeducer void set_option(bufsize&& bsiz); void set_option(environment&& env); void set_option(defer_spawn&& defer); + void set_option(shell&& sh); void set_option(input&& inp); void set_option(output&& out); void set_option(error&& err); void set_option(close_fds&& cfds); + void set_option(preexec_func&& prefunc); + void set_option(session_leader&& sleader); private: Popen* popen_ = nullptr; @@ -570,6 +621,10 @@ public: int poll() throw(OSError); + // Does not fail, Caller is expected to recheck the + // status with a call to poll() + void kill(int sig_num = 9); + void set_out_buf_cap(size_t cap) { stream_.set_out_buf_cap(cap); } void set_err_buf_cap(size_t cap) { stream_.set_err_buf_cap(cap); } @@ -615,9 +670,14 @@ private: bool defer_process_start_ = false; bool close_fds_ = false; + bool has_preexec_fn_ = false; + bool shell_ = false; + bool session_leader_ = false; + std::string exe_name_; std::string cwd_; std::map env_; + preexec_func preexec_fn_; // Command in string format std::string args_; @@ -713,12 +773,22 @@ int Popen::poll() throw (OSError) return retcode_; } +void Popen::kill(int sig_num) +{ + if (session_leader_) killpg(child_pid_, sig_num); + else ::kill(child_pid_, sig_num); +} + void Popen::execute_process() throw (CalledProcessError, OSError) { int err_rd_pipe, err_wr_pipe; std::tie(err_rd_pipe, err_wr_pipe) = util::pipe_cloexec(); + if (shell_) { + vargs_.insert(vargs_.begin(), {"/bin/sh", "-c"}); + } + if (!exe_name_.length()) { exe_name_ = vargs_[0]; } @@ -799,6 +869,14 @@ namespace detail { popen_->defer_process_start_ = defer.defer; } + void ArgumentDeducer::set_option(shell&& sh) { + popen_->shell_ = sh.shell_; + } + + void ArgumentDeducer::set_option(session_leader&& sleader) { + popen_->session_leader_ = sleader.leader_; + } + void ArgumentDeducer::set_option(input&& inp) { if (inp.rd_ch_ != -1) popen_->stream_.read_from_parent_ = inp.rd_ch_; if (inp.wr_ch_ != -1) popen_->stream_.write_to_child_ = inp.wr_ch_; @@ -824,6 +902,11 @@ namespace detail { popen_->close_fds_ = cfds.close_all; } + void ArgumentDeducer::set_option(preexec_func&& prefunc) { + popen_->preexec_fn_ = std::move(prefunc); + popen_->has_preexec_fn_ = true; + } + void Child::execute_child() { int sys_ret = -1; @@ -886,6 +969,15 @@ namespace detail { if (sys_ret == -1) throw OSError("chdir failed", errno); } + if (parent_->has_preexec_fn_) { + parent_->preexec_fn_(); + } + + if (parent_->session_leader_) { + sys_ret = setsid(); + if (sys_ret == -1) throw OSError("setsid failed", errno); + } + // Replace the current image with the executable if (parent_->env_.size()) { for (auto& kv : parent_->env_) { @@ -1137,7 +1229,7 @@ OutBuffer check_output(const std::string& arg, Args&&... args) // Piping Support template -// Args expected to be std::initializer_list +// Args expected to be flat commands using string instead of initializer_list OutBuffer pipeline(Args&&... args) { std::vector pcmds; diff --git a/test/test_cat b/test/test_cat index c7df47fa250c510180bd120a506b3ed1bf031d7e..52d2c4a34867b7ad62a00f6e484abadd05bf4779 100755 GIT binary patch literal 129616 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�D+?+su+Zhiux=N#jT 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 delta 37012 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 M#eUt2IwdaoKW_nzlK=n! diff --git a/test/test_cat.cc b/test/test_cat.cc index 3905b52..8019788 100755 --- a/test/test_cat.cc +++ b/test/test_cat.cc @@ -23,8 +23,16 @@ void test_cat_file_redirection() std::cout << "END_TEST" << std::endl; } +void test_buffer_growth() +{ + auto obuf = sp::check_output({"cat", "../subprocess.hpp"}); + std::cout << obuf.length << std::endl; + assert (obuf.length > sp::DEFAULT_BUF_CAP_BYTES); +} + int main() { test_cat_pipe_redirection(); test_cat_file_redirection(); + test_buffer_growth(); return 0; } diff --git a/test/test_subprocess.cc b/test/test_subprocess.cc index e857a04..5d186c7 100755 --- a/test/test_subprocess.cc +++ b/test/test_subprocess.cc @@ -27,9 +27,16 @@ void test_easy_piping() std::cout << res.buf.data() << std::endl; } +void test_shell() +{ + auto obuf = check_output({"ls", "-l"}, shell{false}); + std::cout << obuf.buf.data() << std::endl; +} + int main() { test_input(); test_piping(); test_easy_piping(); + test_shell(); return 0; }