summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-02-06 14:22:28 +0100
committermadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-02-06 14:22:28 +0100
commit12fd317a7bd8bc6c24d034227076fbe87dfe6e31 (patch)
treeefb62fc7bfcaf2d5ec9c24928f59af1a89ef091a
parentcSocket: re-implemented the GetLastErrorString() function; win: error texts are now queried from the system rather than enumerated by the program (diff)
downloadcuberite-12fd317a7bd8bc6c24d034227076fbe87dfe6e31.tar
cuberite-12fd317a7bd8bc6c24d034227076fbe87dfe6e31.tar.gz
cuberite-12fd317a7bd8bc6c24d034227076fbe87dfe6e31.tar.bz2
cuberite-12fd317a7bd8bc6c24d034227076fbe87dfe6e31.tar.lz
cuberite-12fd317a7bd8bc6c24d034227076fbe87dfe6e31.tar.xz
cuberite-12fd317a7bd8bc6c24d034227076fbe87dfe6e31.tar.zst
cuberite-12fd317a7bd8bc6c24d034227076fbe87dfe6e31.zip
-rw-r--r--source/cSocket.cpp37
1 files changed, 29 insertions, 8 deletions
diff --git a/source/cSocket.cpp b/source/cSocket.cpp
index bb6f68249..323ed59c8 100644
--- a/source/cSocket.cpp
+++ b/source/cSocket.cpp
@@ -94,22 +94,43 @@ void cSocket::CloseSocket()
AString cSocket::GetErrorString( int a_ErrNo )
{
+ char buffer[ 1024 ];
+ AString Out;
+
#ifdef _WIN32
- char Buffer[1024];
- FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, a_ErrNo, 0, Buffer, ARRAYCOUNT(Buffer), NULL);
- return AString(Buffer);
+ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, a_ErrNo, 0, buffer, ARRAYCOUNT(buffer), NULL);
+ Printf(Out, "%d: %s", a_ErrNo, buffer);
+ return Out;
#else // _WIN32
-
- char buffer[ 256 ];
- if( strerror_r( errno, buffer, 256 ) == 0 )
+
+ // According to http://linux.die.net/man/3/strerror_r there are two versions of strerror_r():
+
+ #if (((_POSIX_C_SOURCE >= 200112L) || (_XOPEN_SOURCE >= 600)) && ! _GNU_SOURCE) // XSI version of strerror_r():
+
+ int res = strerror_r( errno, buffer, ARRAYCOUNT(buffer) );
+ if( res == 0 )
{
- return AString( buffer );
+ Printf(Out, "%d: %s", a_ErrNo, buffer);
+ return Out;
}
+
+ #else // GNU version of strerror_r()
+
+ char * res = strerror_r( errno, buffer, ARRAYCOUNT(buffer) );
+ if( res != NULL )
+ {
+ Printf(Out, "%d: %s", a_ErrNo, res);
+ return Out;
+ }
+
+ #endif // strerror_r() version
+
else
{
- return "Error on getting error string!";
+ Printf(Out, "Error %d while getting error string for error #%d!", errno, a_ErrNo);
+ return Out;
}
#endif // else _WIN32