2#ifndef LOGIT_CPP_HEADER_LOGIT_CPP_LOGIT_DETAIL_SYSTEM_ERROR_MACROS_HPP_INCLUDED
3#define LOGIT_CPP_HEADER_LOGIT_CPP_LOGIT_DETAIL_SYSTEM_ERROR_MACROS_HPP_INCLUDED
20inline std::string _logit_format_winerr(DWORD code) {
21 LPSTR buffer =
nullptr;
22 const DWORD flags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;
23 const DWORD length = ::FormatMessageA(flags,
26 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
27 reinterpret_cast<LPSTR
>(&buffer),
31 if (length == 0 || buffer ==
nullptr) {
35 std::string message(buffer, length);
38 while (!message.empty() && (message.back() ==
'\r' || message.back() ==
'\n')) {
49#define LOGIT_DETAIL_PERROR(level_macro, message) \
51 const int _logit_errno_code = (errno); \
52 const char *_logit_errno_desc = ::strerror(_logit_errno_code); \
53 if (_logit_errno_desc == nullptr) { \
54 _logit_errno_desc = ""; \
56 const std::string _logit_errno_text(message); \
57 LOGIT_PRINTF_##level_macro(LOGIT_POSIX_ERROR_PATTERN, \
58 _logit_errno_text.c_str(), \
65#define LOGIT_DETAIL_WINERR(level_macro, message) \
67 const DWORD _logit_winerr_code = ::GetLastError(); \
68 const std::string _logit_winerr_text(message); \
69 const std::string _logit_winerr_desc = ::logit::detail::_logit_format_winerr(_logit_winerr_code); \
70 LOGIT_PRINTF_##level_macro(LOGIT_WINDOWS_ERROR_PATTERN, \
71 _logit_winerr_text.c_str(), \
72 static_cast<unsigned long>(_logit_winerr_code), \
73 _logit_winerr_desc.c_str()); \
78#define LOGIT_DETAIL_WINERR(level_macro, message) do { } while (0)
The primary namespace for the LogIt++ library.