Prevent win_eventlog_sink from silently discarding errors when wide support is enabled

This commit is contained in:
Charles Milette
2021-01-06 22:17:09 -05:00
parent f39ccccc0c
commit fc594b551a
4 changed files with 11 additions and 23 deletions

View File

@@ -224,35 +224,22 @@ protected:
formatted.push_back('\0');
#ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT
try
{
memory_buf_t buf;
details::os::utf8_to_wstrbuf(string_view_t(formatted.data(), formatted.size()), buf);
wmemory_buf_t buf;
details::os::utf8_to_wstrbuf(string_view_t(formatted.data(), formatted.size()), buf);
LPCWSTR lp_wstr = reinterpret_cast<LPCWSTR>(buf.data());
succeeded = ::ReportEventW(event_log_handle(), eventlog::get_event_type(msg), eventlog::get_event_category(msg), event_id_,
LPCWSTR lp_wstr = buf.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_wstr, nullptr);
if (!succeeded)
{
SPDLOG_THROW(win32_error("ReportEvent"));
}
}
catch (...)
{
// WCHAR string conversion can fail and if it does, we shouldn't call to report event function.
}
#else
LPCSTR lp_str = reinterpret_cast<LPCSTR>(formatted.data());
LPCSTR lp_str = formatted.data();
succeeded = ::ReportEventA(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);
#endif
if (!succeeded)
{
SPDLOG_THROW(win32_error("ReportEvent"));
}
#endif
}
void flush_() override {}