@ -16,16 +16,23 @@
// 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.
std : : string GetLastErrorMsg ( ) {
std : : string GetLastErrorMsg ( ) {
static const std : : size_t buff_size = 255 ;
static const expr std : : size_t buff_size = 255 ;
char err_str [ buff_size ] ;
char err_str [ buff_size ] ;
# ifdef _WIN32
# ifdef _WIN32
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 ) ;
return std : : string ( err_str , buff_size ) ;
# elif defined(__GLIBC__) && (_GNU_SOURCE || (_POSIX_C_SOURCE < 200112L && _XOPEN_SOURCE < 600))
// Thread safe (GNU-specific)
const char * str = strerror_r ( errno , err_str , buff_size ) ;
return std : : string ( str ) ;
# else
# else
// Thread safe (XSI-compliant)
// Thread safe (XSI-compliant)
strerror_r ( errno , err_str , buff_size ) ;
const int success = strerror_r ( errno , err_str , buff_size ) ;
if ( success ! = 0 ) {
return { } ;
}
return std : : string ( err_str ) ;
# endif
# endif
return std : : string ( err_str , buff_size ) ;
}
}