@ -4,34 +4,28 @@
# include <cstddef>
# include <cstddef>
# ifdef _WIN32
# ifdef _WIN32
# include < w indows.h>
# include < W indows.h>
# else
# else
# include <cerrno>
# include <cerrno>
# include <cstring>
# include <cstring>
# endif
# endif
// Neither Android nor OS X support TLS
# include "common/common_funcs.h"
# if defined(__APPLE__) || (ANDROID && __clang__)
# define __thread
# endif
// Generic function to get last error message.
// Generic function to get last error message.
// Call directly after the command or use the error num.
// Call directly after the command or use the error num.
// This function might change the error code.
// This function might change the error code.
const char * GetLastErrorMsg( ) {
std : : string GetLastErrorMsg( ) {
static const size_t buff_size = 255 ;
static const size_t buff_size = 255 ;
char err_str [ buff_size ] ;
# ifdef _WIN32
# ifdef _WIN32
static __declspec ( thread ) char err_str [ buff_size ] = { } ;
FormatMessageA ( FORMAT_MESSAGE_FROM_SYSTEM , nullptr , GetLastError ( ) ,
FormatMessageA ( FORMAT_MESSAGE_FROM_SYSTEM , nullptr , GetLastError ( ) ,
MAKELANGID ( LANG_NEUTRAL , SUBLANG_DEFAULT ) , err_str , buff_size , nullptr ) ;
MAKELANGID ( LANG_NEUTRAL , SUBLANG_DEFAULT ) , err_str , buff_size , nullptr ) ;
# else
# else
static __thread char err_str [ buff_size ] = { } ;
// Thread safe (XSI-compliant)
// Thread safe (XSI-compliant)
strerror_r ( errno , err_str , buff_size ) ;
strerror_r ( errno , err_str , buff_size ) ;
# endif
# endif
return err_str;
return std: : string ( err_str, buff_size ) ;
}
}