From 211478e13ea27588b6d8c88e6b70216f7bd4e7f2 Mon Sep 17 00:00:00 2001 From: Amir Alperin Date: Sun, 13 Dec 2020 10:45:55 +0200 Subject: [PATCH] convert message back to wchar --- include/spdlog/sinks/win_eventlog_sink.h | 38 ++++++++---------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/include/spdlog/sinks/win_eventlog_sink.h b/include/spdlog/sinks/win_eventlog_sink.h index 7b50b7b5..ef4de59e 100644 --- a/include/spdlog/sinks/win_eventlog_sink.h +++ b/include/spdlog/sinks/win_eventlog_sink.h @@ -39,6 +39,8 @@ Windows Registry Editor Version 5.00 #include #include #include +#include +#include namespace spdlog { namespace sinks { @@ -55,34 +57,20 @@ struct win32_error : public spdlog_ex { std::string system_message; - auto fFormatResult = [&system_message](bool format_message_succeeded, void* format_message_result) - { - if (format_message_succeeded && format_message_result) - { - system_message = fmt::format(" ({})", format_message_result); - } - - if (format_message_result) - { - LocalFree((HLOCAL)format_message_result); - } - }; - -#ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT - LPWSTR format_message_result{}; - auto format_message_succeeded = - ::FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, - error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&format_message_result, 0, nullptr); - - fFormatResult(format_message_succeeded, format_message_result); -#else LPSTR format_message_result{}; auto format_message_succeeded = ::FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&format_message_result, 0, nullptr); - fFormatResult(format_message_succeeded, format_message_result); -#endif + if (format_message_succeeded && format_message_result) + { + system_message = fmt::format(" ({})", format_message_result); + } + + if (format_message_result) + { + LocalFree((HLOCAL)format_message_result); + } return fmt::format("{}: {}{}", user_message, error_code, system_message); } @@ -238,10 +226,10 @@ protected: formatted.push_back('\0'); #ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT - LPCWSTR lp_str = reinterpret_cast(formatted.data()); + auto buf = std::wstring_convert>().from_bytes(formatted.data()); succeeded = ::ReportEventW(event_log_handle(), eventlog::get_event_type(msg), eventlog::get_event_category(msg), event_id_, - current_user_sid_.as_sid(), 1, 0, &lp_str, nullptr); + current_user_sid_.as_sid(), 1, 0, (LPCWSTR*)buf.c_str(), nullptr); #else LPCSTR lp_str = reinterpret_cast(formatted.data());