core/LibrarySys.cpp
changeset 2474 1f4345fb0f75
parent 2471 194be299b700
child 2685 aacf5c8b3ac2
     1.1 --- a/core/LibrarySys.cpp	Mon Dec 22 20:12:33 2008 -0600
     1.2 +++ b/core/LibrarySys.cpp	Fri Dec 26 23:26:21 2008 -0500
     1.3 @@ -273,20 +273,34 @@
     1.4  
     1.5  void LibrarySystem::GetPlatformError(char *error, size_t maxlength)
     1.6  {
     1.7 +#if defined PLATFORM_WINDOWS
     1.8 +	return GetPlatformErrorEx(GetLastError(), error, maxlength);
     1.9 +#elif defined PLATFORM_POSIX
    1.10 +	return GetPlatformErrorEx(errno, error, maxlength);
    1.11 +#endif
    1.12 +}
    1.13 +
    1.14 +void LibrarySystem::GetPlatformErrorEx(int code, char *error, size_t maxlength)
    1.15 +{
    1.16  	if (error && maxlength)
    1.17  	{
    1.18  #if defined PLATFORM_WINDOWS
    1.19 -		DWORD dw = GetLastError();
    1.20  		FormatMessageA(
    1.21  			FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
    1.22  			NULL,
    1.23 -			dw,
    1.24 +			(DWORD)code,
    1.25  			MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    1.26  			(LPSTR)error,
    1.27  			maxlength,
    1.28  			NULL);
    1.29 +#elif defined PLATFORM_LINUX
    1.30 +		const char *ae = strerror_r(code, error, maxlength);
    1.31 +		if (ae != error)
    1.32 +		{
    1.33 +			UTIL_Format(error, maxlength, "%s", ae);
    1.34 +		}
    1.35  #elif defined PLATFORM_POSIX
    1.36 -		UTIL_Format(error, maxlength, "%s", strerror(errno));
    1.37 +		strerror_r(code, error, maxlength);
    1.38  #endif
    1.39  	}
    1.40  }