| // Copyright 2019 The Bazel Authors. All rights reserved. | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| #ifndef BAZEL_SRC_MAIN_NATIVE_WINDOWS_PROCESS_H_ | |
| #define BAZEL_SRC_MAIN_NATIVE_WINDOWS_PROCESS_H_ | |
| #ifndef WIN32_LEAN_AND_MEAN | |
| #define WIN32_LEAN_AND_MEAN | |
| #endif | |
| #include <windows.h> | |
| #include <stdint.h> | |
| #include <string> | |
| #include "src/main/native/windows/util.h" | |
| namespace bazel { | |
| namespace windows { | |
| class WaitableProcess { | |
| public: | |
| // These are the possible return values from the WaitFor() method. | |
| enum { | |
| kWaitSuccess = 0, | |
| kWaitTimeout = 1, | |
| kWaitError = 2, | |
| }; | |
| WaitableProcess() : pid_(0), exit_code_(STILL_ACTIVE) {} | |
| bool Create(const std::wstring& argv0, const std::wstring& argv_rest, | |
| void* env, const std::wstring& wcwd, std::wstring* error); | |
| bool Create(const std::wstring& argv0, const std::wstring& argv_rest, | |
| void* env, const std::wstring& wcwd, HANDLE stdin_process, | |
| HANDLE stdout_process, HANDLE stderr_process, | |
| LARGE_INTEGER* opt_out_start_time, std::wstring* error); | |
| int WaitFor(int64_t timeout_msec, LARGE_INTEGER* opt_out_end_time, | |
| std::wstring* error); | |
| int GetExitCode(std::wstring* error); | |
| bool Terminate(std::wstring* error); | |
| DWORD GetPid() const { return pid_; } | |
| private: | |
| bool Create(const std::wstring& argv0, const std::wstring& argv_rest, | |
| void* env, const std::wstring& wcwd, HANDLE stdin_process, | |
| HANDLE stdout_process, HANDLE stderr_process, | |
| LARGE_INTEGER* opt_out_start_time, bool create_window, | |
| std::wstring* error); | |
| AutoHandle process_, job_, ioport_; | |
| DWORD pid_, exit_code_; | |
| }; | |
| } // namespace windows | |
| } // namespace bazel | |
| #endif // BAZEL_SRC_MAIN_NATIVE_WINDOWS_PROCESS_H_ |