From 4e5fe6366a2041b09616a9a2e3b2ccb038a4d2f1 Mon Sep 17 00:00:00 2001 From: Sepalani Date: Thu, 17 Aug 2017 20:12:44 +0100 Subject: CommonFuncs: LastStrerrorString added --- Source/Core/Common/CommonFuncs.cpp | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) (limited to 'Source/Core/Common/CommonFuncs.cpp') diff --git a/Source/Core/Common/CommonFuncs.cpp b/Source/Core/Common/CommonFuncs.cpp index bfb2878dd3..ef370672d2 100644 --- a/Source/Core/Common/CommonFuncs.cpp +++ b/Source/Core/Common/CommonFuncs.cpp @@ -22,27 +22,35 @@ #ifdef _WIN32 #include +#define strerror_r(err, buf, len) strerror_s(buf, len, err) #endif -// Generic function to get last error message. -// Call directly after the command or use the error num. +constexpr size_t BUFFER_SIZE = 256; + +// Wrapper function to get last strerror(errno) string. // This function might change the error code. -std::string GetLastErrorMsg() +std::string LastStrerrorString() { - const size_t buff_size = 256; - char err_str[buff_size]; + char error_message[BUFFER_SIZE]; -#ifdef _WIN32 - FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err_str, buff_size, nullptr); -#else // We assume that the XSI-compliant version of strerror_r (returns int) is used // rather than the GNU version (returns char*). The returned value is stored to // an int variable to get a compile-time check that the return type is not char*. - const int result = strerror_r(errno, err_str, buff_size); + const int result = strerror_r(errno, error_message, BUFFER_SIZE); if (result != 0) return ""; -#endif + return std::string(error_message); +} - return std::string(err_str); +#ifdef _WIN32 +// Wrapper function to get GetLastError() string. +// This function might change the error code. +std::string GetLastErrorString() +{ + char error_message[BUFFER_SIZE]; + + FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), error_message, BUFFER_SIZE, nullptr); + return std::string(error_message); } +#endif -- cgit v1.2.3