diff options
Diffstat (limited to 'src/error.cpp')
-rw-r--r-- | src/error.cpp | 68 |
1 files changed, 0 insertions, 68 deletions
diff --git a/src/error.cpp b/src/error.cpp deleted file mode 100644 index 8e370e8..0000000 --- a/src/error.cpp +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2017 Egor Tensin <Egor.Tensin@gmail.com> -// This file is part of the "winapi-debug" project. -// For details, see https://github.com/egor-tensin/winapi-debug. -// Distributed under the MIT License. - -#include <pdb/all.hpp> - -#include <winapi/utf8.hpp> - -#include <windows.h> - -#include <sstream> -#include <string> -#include <system_error> - -namespace pdb { -namespace error { -namespace { - -std::wstring trim_trailing_newline(const std::wstring& s) { - const auto last_pos = s.find_last_not_of(L"\r\n"); - if (std::wstring::npos == last_pos) - return {}; - return s.substr(0, last_pos + 1); -} - -std::string build_what(DWORD code, const char* function) { - std::ostringstream what; - what << "Function " << function << " failed with error code " << code; - return what.str(); -} - -std::string format_message(int code) { - wchar_t* buf; - - const auto len = FormatMessageW( - FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - code, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - reinterpret_cast<wchar_t*>(&buf), - 0, - NULL); - - if (0 == len) { - LocalFree(buf); - return "Couldn't format the error message"; - } - - std::wstring msg{buf, len}; - LocalFree(buf); - return winapi::narrow(trim_trailing_newline(msg)); -} - -} // namespace - -std::string CategoryWindows::message(int code) const { - return format_message(code); -} - -std::system_error windows(DWORD code, const char* function) { - static_assert(sizeof(DWORD) == sizeof(int), "Aren't DWORDs the same size as ints?"); - return std::system_error{ - static_cast<int>(code), category_windows(), build_what(code, function)}; -} - -} // namespace error -} // namespace pdb |