aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/error.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/error.cpp20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/error.cpp b/src/error.cpp
index 16512b3..d305e88 100644
--- a/src/error.cpp
+++ b/src/error.cpp
@@ -5,6 +5,8 @@
#include "pdb/all.hpp"
+#include <boost/nowide/convert.hpp>
+
#include <windows.h>
#include <string>
@@ -13,9 +15,9 @@ namespace pdb {
namespace error {
namespace {
-std::string trim_trailing_newline(const std::string& s) {
- const auto last_pos = s.find_last_not_of("\r\n");
- if (std::string::npos == last_pos)
+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);
}
@@ -23,25 +25,25 @@ std::string trim_trailing_newline(const std::string& s) {
} // namespace
std::string CategoryWindows::message(int code) const {
- char* buf;
+ wchar_t* buf;
- const auto nbwritten = FormatMessageA(
+ 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<char*>(&buf),
+ reinterpret_cast<wchar_t*>(&buf),
0,
NULL);
- if (0 == nbwritten) {
+ if (0 == len) {
LocalFree(buf);
return "Couldn't format the error message";
}
- std::string msg{buf, nbwritten};
+ std::wstring msg{buf, len};
LocalFree(buf);
- return trim_trailing_newline(msg);
+ return boost::nowide::narrow(trim_trailing_newline(msg));
}
} // namespace error