diff options
| author | Sepalani <sepalani@hotmail.fr> | 2022-08-22 12:39:02 +0400 |
|---|---|---|
| committer | Sepalani <sepalani@hotmail.fr> | 2022-08-22 14:02:26 +0400 |
| commit | 597fb9ff6dd8ab4500141186f0ebebd2aaea92f0 (patch) | |
| tree | fd0e0d1b6fccf8efdb6b4da1c1a341b7368658e1 /Source/Core/Common/Network.cpp | |
| parent | cc3e6a11ac07bd7ac242d6f18fb8273aa0c11724 (diff) | |
Move SocketManager's DecodeError to Common
Fix thread safety issue
Diffstat (limited to 'Source/Core/Common/Network.cpp')
| -rw-r--r-- | Source/Core/Common/Network.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Source/Core/Common/Network.cpp b/Source/Core/Common/Network.cpp index 2d532690c1..a112fb9a99 100644 --- a/Source/Core/Common/Network.cpp +++ b/Source/Core/Common/Network.cpp @@ -9,6 +9,7 @@ #ifndef _WIN32 #include <netinet/in.h> +#include <string.h> #include <sys/socket.h> #include <sys/types.h> #else @@ -545,4 +546,24 @@ void RestoreNetworkErrorState(const NetworkErrorState& state) WSASetLastError(state.wsa_error); #endif } + +const char* DecodeNetworkError(s32 error_code) +{ + thread_local char buffer[1024]; +#define IS_BSD_STRERROR \ + defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(ANDROID) || \ + defined(__APPLE__) +#ifdef _WIN32 + FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | + FORMAT_MESSAGE_MAX_WIDTH_MASK, + nullptr, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buffer, + sizeof(buffer), nullptr); + return buffer; +#elif (IS_BSD_STRERROR) || ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !_GNU_SOURCE) + strerror_r(error_code, buffer, sizeof(buffer)); + return buffer; +#else + return strerror_r(error_code, buffer, sizeof(buffer)); +#endif +} } // namespace Common |
