From 50db2113ff88ce81b5c6516982cba785549ede3e Mon Sep 17 00:00:00 2001 From: Haowen Liu Date: Sun, 20 Apr 2025 17:44:55 -0400 Subject: [PATCH] Get Windows return code in wait() Currently, wait() returns 0 on windows regardless of the actual return code of processes. --- subprocess.hpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/subprocess.hpp b/subprocess.hpp index 24fa303..e8307cc 100755 --- a/subprocess.hpp +++ b/subprocess.hpp @@ -1408,7 +1408,12 @@ inline int Popen::wait() noexcept(false) #ifdef __USING_WINDOWS__ int ret = WaitForSingleObject(process_handle_, INFINITE); - return 0; + DWORD dretcode_; + + if (FALSE == GetExitCodeProcess(process_handle_, &dretcode_)) + throw OSError("Failed during call to GetExitCodeProcess", 0); + + return (int)dretcode_; #else int ret, status; std::tie(ret, status) = util::wait_for_child_exit(pid());