diff --git a/src/common/misc.cpp b/src/common/misc.cpp index bbd2516..2566bee 100644 --- a/src/common/misc.cpp +++ b/src/common/misc.cpp @@ -4,6 +4,8 @@ #include #include +#include + #ifdef _WIN32 #include #else @@ -22,12 +24,14 @@ std::string GetLastErrorMsg() { #if defined(_WIN32) FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err_str, buff_size, nullptr); -#elif defined(__GNUC__) - const char* err = strerror_r(errno, err_str, buff_size); - return std::string(err, strlen(err)); #else - // Thread safe (XSI-compliant) - strerror_r(errno, err_str, buff_size); + auto ret = strerror_r(errno, err_str, buff_size); + if constexpr (std::is_same_v) { + // GNU specific + // This is a workaround for XSI-compliant variant; this should always be safe. + const char* str = reinterpret_cast(ret); + return std::string(str, strlen(str)); + } #endif return std::string(err_str, strnlen(err_str, buff_size));