From 515d92b035ae27304a5f0a40ac7bbc1dff5f933e Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Mon, 6 Mar 2023 16:07:08 +0100 Subject: [PATCH] Add errno_error exception type Signed-off-by: Simon Rozman --- include/stdex/errno.h | 77 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 include/stdex/errno.h diff --git a/include/stdex/errno.h b/include/stdex/errno.h new file mode 100644 index 000000000..571be4a9b --- /dev/null +++ b/include/stdex/errno.h @@ -0,0 +1,77 @@ +/* + SPDX-License-Identifier: MIT + Copyright © 2023 Amebis +*/ + +#pragma once + +#include "sal.h" +#include +#include + +namespace stdex +{ + /// + /// Standard C runtime library error + /// + class errno_error : public std::runtime_error + { + public: + /// + /// Constructs an exception + /// + /// \param[in] num Numeric error code + /// \param[in] msg Error message + /// + errno_error(_In_ errno_t num, _In_ const std::string& msg) : + m_num(num), + runtime_error(msg) + { + } + + /// + /// Constructs an exception + /// + /// \param[in] num Numeric error code + /// \param[in] msg Error message + /// + errno_error(_In_ errno_t num, _In_opt_z_ const char *msg = nullptr) : + m_num(num), + runtime_error(msg) + { + } + + /// + /// Constructs an exception using `GetLastError()` + /// + /// \param[in] msg Error message + /// + errno_error(_In_ const std::string& msg) : + m_num(errno), + runtime_error(msg) + { + } + + /// + /// Constructs an exception using `GetLastError()` + /// + /// \param[in] msg Error message + /// + errno_error(_In_opt_z_ const char *msg = nullptr) : + m_num(errno), + runtime_error(msg) + { + } + + /// + /// Returns the error number + /// + errno_t number() const + { + return m_num; + } + + protected: + errno_t m_num; ///< Numeric error code + }; +} \ No newline at end of file