From e0b8a35937e5c93ce661e9a947bd2b5f68aa810f Mon Sep 17 00:00:00 2001 From: Lioncash Date: Thu, 19 Jul 2018 09:03:30 -0400 Subject: common/misc: Deduplicate code in GetLastErrorMsg() Android and macOS have supported thread_local for quite a while, but most importantly is that we don't even really need it. Instead of using a thread-local buffer, we can just return a non-static buffer as a std::string, avoiding the need for that quality entirely. --- src/common/misc.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) (limited to 'src/common/misc.cpp') diff --git a/src/common/misc.cpp b/src/common/misc.cpp index 7be2235b0..217a87098 100644 --- a/src/common/misc.cpp +++ b/src/common/misc.cpp @@ -4,34 +4,28 @@ #include #ifdef _WIN32 -#include +#include #else #include #include #endif -// Neither Android nor OS X support TLS -#if defined(__APPLE__) || (ANDROID && __clang__) -#define __thread -#endif +#include "common/common_funcs.h" // Generic function to get last error message. // Call directly after the command or use the error num. // This function might change the error code. -const char* GetLastErrorMsg() { +std::string GetLastErrorMsg() { static const size_t buff_size = 255; + char err_str[buff_size]; #ifdef _WIN32 - static __declspec(thread) char err_str[buff_size] = {}; - FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err_str, buff_size, nullptr); #else - static __thread char err_str[buff_size] = {}; - // Thread safe (XSI-compliant) strerror_r(errno, err_str, buff_size); #endif - return err_str; + return std::string(err_str, buff_size); } -- cgit v1.2.3