diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2020-10-15 03:29:20 +0300 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2020-10-15 10:39:54 +0300 |
commit | d24ef6058f2d60100be44507d46014ef30010493 (patch) | |
tree | b355d18a2b0f963a6fad9af9f6fa67b2850d31cf /include/winapi | |
parent | test: add test utility "args" (diff) | |
download | winapi-common-d24ef6058f2d60100be44507d46014ef30010493.tar.gz winapi-common-d24ef6058f2d60100be44507d46014ef30010493.zip |
WIP: add simple Process class
Diffstat (limited to 'include/winapi')
-rw-r--r-- | include/winapi/cmd_line.hpp | 9 | ||||
-rw-r--r-- | include/winapi/error.hpp | 9 | ||||
-rw-r--r-- | include/winapi/process.hpp | 25 |
3 files changed, 40 insertions, 3 deletions
diff --git a/include/winapi/cmd_line.hpp b/include/winapi/cmd_line.hpp index ac88286..60bc56a 100644 --- a/include/winapi/cmd_line.hpp +++ b/include/winapi/cmd_line.hpp @@ -21,6 +21,12 @@ public: CommandLine() = default; + CommandLine(const std::string& argv0, const std::vector<std::string>& args = {}) + : argv0(argv0), args(args) {} + + CommandLine(std::string&& argv0, std::vector<std::string>&& args = {}) + : argv0(std::move(argv0)), args(std::move(args)) {} + bool has_argv0() const { return !argv0.empty(); } std::string get_argv0() const { return argv0; } @@ -50,9 +56,6 @@ private: CommandLine(std::vector<std::string>&& args) : args(std::move(args)) {} - CommandLine(std::string&& argv0, std::vector<std::string>&& args = {}) - : argv0(std::move(argv0)), args(std::move(args)) {} - const std::string argv0; const std::vector<std::string> args; }; diff --git a/include/winapi/error.hpp b/include/winapi/error.hpp index 4b3f1e0..89bcfed 100644 --- a/include/winapi/error.hpp +++ b/include/winapi/error.hpp @@ -9,6 +9,8 @@ #include <windows.h> +#include <sstream> +#include <stdexcept> #include <string> #include <system_error> @@ -31,5 +33,12 @@ inline const CategoryWindows& category_windows() { std::system_error windows(DWORD code, const char* function); +template <typename Ret> +std::runtime_error custom(Ret ret, const char* function) { + std::ostringstream oss; + oss << "Function " << function << " failed with error code " << ret; + return std::runtime_error{oss.str()}; +} + } // namespace error } // namespace winapi diff --git a/include/winapi/process.hpp b/include/winapi/process.hpp new file mode 100644 index 0000000..d20ac38 --- /dev/null +++ b/include/winapi/process.hpp @@ -0,0 +1,25 @@ +// Copyright (c) 2020 Egor Tensin <Egor.Tensin@gmail.com> +// This file is part of the "winapi-common" project. +// For details, see https://github.com/egor-tensin/winapi-common. +// Distributed under the MIT License. + +#include "cmd_line.hpp" +#include "handle.hpp" + +#include <utility> + +namespace winapi { + +class Process { +public: + static Process create(const CommandLine&); + + void wait(); + +private: + explicit Process(Handle&& handle) : m_handle{std::move(handle)} {} + + Handle m_handle; +}; + +} // namespace winapi |