Browse Source
Initialization: set fallback locale as environment variable
The scope of `std::locale::global` appears to be smaller than `setenv("LC_ALL", ...)` and insufficient to fix messed up locale settings for the whole application.
try
dexX7
10 years ago
No known key found for this signature in database
GPG Key ID: 7675E31CF5719832
1 changed files with
4 additions and
3 deletions
src/util.cpp
@ -723,18 +723,19 @@ void RenameThread(const char* name)
void SetupEnvironment ( )
{
std : : locale loc ( " C " ) ;
// On most POSIX systems (e.g. Linux, but not BSD) the environment's locale
// may be invalid, in which case the "C" locale is used as fallback.
# if !defined(WIN32) && !defined(MAC_OSX) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
try {
std : : locale ( " " ) ; // Raises a runtime error if current locale is invalid
loc = std : : locale ( " " ) ; // Raises a runtime error if current locale is invalid
} catch ( const std : : runtime_error & ) {
std : : locale : : global ( std : : locale ( " C " ) ) ;
setenv ( " LC_ALL " , " C " , 1 ) ;
}
# endif
// The path locale is lazy initialized and to avoid deinitialization errors
// in multithreading environments, it is set explicitly by the main thread.
boost : : filesystem : : path : : imbue ( std : : locale ( ) ) ;
boost : : filesystem : : path : : imbue ( loc ) ;
}
void SetThreadPriority ( int nPriority )