From ff79adbe056220202f7a56d67f788c38fc49ef9f Mon Sep 17 00:00:00 2001 From: Sebastian Falbesoner Date: Thu, 25 Apr 2024 02:04:31 +0200 Subject: [PATCH 1/4] remove unused templates from cpp-subprocess The templates `is_ready`, `param_pack`, and `has_type` are not used anywhere, so let's remove them. --- src/util/subprocess.h | 35 ----------------------------------- 1 file changed, 35 deletions(-) diff --git a/src/util/subprocess.h b/src/util/subprocess.h index 4acfa8ff83..4c31a23d41 100644 --- a/src/util/subprocess.h +++ b/src/util/subprocess.h @@ -159,12 +159,6 @@ public: //-------------------------------------------------------------------- namespace util { - template - inline bool is_ready(std::shared_future const &f) - { - return f.wait_for(std::chrono::seconds(0)) == std::future_status::ready; - } - inline void quote_argument(const std::wstring &argument, std::wstring &command_line, bool force) { @@ -724,35 +718,6 @@ class Popen; */ namespace detail { - -// Metaprogram for searching a type within -// a variadic parameter pack -// This is particularly required to do a compile time -// checking of the arguments provided to 'check_output' function -// wherein the user is not expected to provide an 'output' option. - -template struct param_pack{}; - -template struct has_type; - -template -struct has_type> { - static constexpr bool value = false; -}; - -template -struct has_type> { - static constexpr bool value = true; -}; - -template -struct has_type> { - static constexpr bool value = - std::is_same::type>::value ? true : has_type>::value; -}; - -//---- - /*! * A helper class to Popen class for setting * options as provided in the Popen constructor From 908c51fe4afeba0af500c6275027b1afa1b3bd19 Mon Sep 17 00:00:00 2001 From: Sebastian Falbesoner Date: Thu, 25 Apr 2024 17:44:39 +0200 Subject: [PATCH 2/4] remove commented out code in cpp-subprocess --- src/util/subprocess.h | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/src/util/subprocess.h b/src/util/subprocess.h index 4c31a23d41..dfe6e63c1a 100644 --- a/src/util/subprocess.h +++ b/src/util/subprocess.h @@ -682,22 +682,6 @@ public: explicit Buffer(size_t cap) { buf.resize(cap); } void add_cap(size_t cap) { buf.resize(cap); } -#if 0 - Buffer(const Buffer& other): - buf(other.buf), - length(other.length) - { - std::cout << "COPY" << std::endl; - } - - Buffer(Buffer&& other): - buf(std::move(other.buf)), - length(other.length) - { - std::cout << "MOVE" << std::endl; - } -#endif - public: std::vector buf; size_t length = 0; @@ -974,15 +958,6 @@ public: execute_process(); } -/* - ~Popen() - { -#ifdef __USING_WINDOWS__ - CloseHandle(this->process_handle_); -#endif - } -*/ - int pid() const noexcept { return child_pid_; } int retcode() const noexcept { return retcode_; } From 97f159776ec06f767df1d4990aa7d0859140f52f Mon Sep 17 00:00:00 2001 From: Sebastian Falbesoner Date: Sat, 27 Apr 2024 14:36:32 +0200 Subject: [PATCH 3/4] remove unused method `Popen::kill` from cpp-subprocess --- src/util/subprocess.h | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/util/subprocess.h b/src/util/subprocess.h index dfe6e63c1a..8c5f074918 100644 --- a/src/util/subprocess.h +++ b/src/util/subprocess.h @@ -905,7 +905,6 @@ private: * 4. retcode() - The return code of the exited child. * 5. pid() - PID of the spawned child. * 6. poll() - Check the status of the running child. - * 7. kill(sig_num) - Kill the child. SIGTERM used by default. * 8. send(...) - Send input to the input channel of the child. * 9. communicate(...) - Get the output/error from the child and close the channels * from the parent side. @@ -966,10 +965,6 @@ public: int poll() noexcept(false); - // 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); } @@ -1137,18 +1132,6 @@ inline int Popen::poll() noexcept(false) #endif } -inline void Popen::kill(int sig_num) -{ -#ifdef __USING_WINDOWS__ - if (!TerminateProcess(this->process_handle_, (UINT)sig_num)) { - throw OSError("TerminateProcess", 0); - } -#else - ::kill(child_pid_, sig_num); -#endif -} - - inline void Popen::execute_process() noexcept(false) { #ifdef __USING_WINDOWS__ From 8b52e7f628304e83b0e36fd97e617de0f71c5a62 Mon Sep 17 00:00:00 2001 From: Sebastian Falbesoner Date: Sat, 27 Apr 2024 14:43:44 +0200 Subject: [PATCH 4/4] update comments in cpp-subprocess (check_output references) Remove obsolete `check_output` references in the comments and remove the numbering of the Popen API methods, as they don't seem to provide a value and just make diffs larger for future changes. --- src/util/subprocess.h | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/util/subprocess.h b/src/util/subprocess.h index 8c5f074918..af408b31d4 100644 --- a/src/util/subprocess.h +++ b/src/util/subprocess.h @@ -670,8 +670,8 @@ struct error * This is basically used to determine the length of the actual * data stored inside the dynamically resized vector. * - * This is what is returned as the output to communicate and check_output - * functions, so, users must know about this class. + * This is what is returned as the output to the communicate + * function, so, users must know about this class. * * OutBuffer and ErrBuffer are just different typedefs to this class. */ @@ -704,8 +704,7 @@ class Popen; namespace detail { /*! * A helper class to Popen class for setting - * options as provided in the Popen constructor - * or in check_output arguments. + * options as provided in the Popen constructor. * This design allows us to _not_ have any fixed position * to any arguments and specify them in a way similar to what * can be done in python. @@ -897,23 +896,23 @@ private: * interface to the client. * * API's provided by the class: - * 1. Popen({"cmd"}, output{..}, error{..}, ....) + * Popen({"cmd"}, output{..}, error{..}, ....) * Command provided as a sequence. - * 2. Popen("cmd arg1"m output{..}, error{..}, ....) + * Popen("cmd arg1", output{..}, error{..}, ....) * Command provided in a single string. - * 3. wait() - Wait for the child to exit. - * 4. retcode() - The return code of the exited child. - * 5. pid() - PID of the spawned child. - * 6. poll() - Check the status of the running child. - * 8. send(...) - Send input to the input channel of the child. - * 9. communicate(...) - Get the output/error from the child and close the channels - * from the parent side. - *10. input() - Get the input channel/File pointer. Can be used for - * customizing the way of sending input to child. - *11. output() - Get the output channel/File pointer. Usually used - in case of redirection. See piping examples. - *12. error() - Get the error channel/File pointer. Usually used - in case of redirection. + * wait() - Wait for the child to exit. + * retcode() - The return code of the exited child. + * pid() - PID of the spawned child. + * poll() - Check the status of the running child. + * send(...) - Send input to the input channel of the child. + * communicate(...) - Get the output/error from the child and close the channels + * from the parent side. + * input() - Get the input channel/File pointer. Can be used for + * customizing the way of sending input to child. + * output() - Get the output channel/File pointer. Usually used + in case of redirection. See piping examples. + * error() - Get the error channel/File pointer. Usually used + in case of redirection. */ class Popen {