aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/sdl/sdl.cpp
diff options
context:
space:
mode:
authorD G Turner2013-11-03 17:10:18 +0000
committerD G Turner2013-11-03 17:10:18 +0000
commitde8da01b0e8a309b9ed3f5b0f152ebbcf8f4af37 (patch)
treeb6e0bfd5a6b2c2c41f0b80d6d35f59b6a5670264 /backends/platform/sdl/sdl.cpp
parentc3df6c9c0caaa07d6c7af0066a79f2cd87d0a079 (diff)
downloadscummvm-rg350-de8da01b0e8a309b9ed3f5b0f152ebbcf8f4af37.tar.gz
scummvm-rg350-de8da01b0e8a309b9ed3f5b0f152ebbcf8f4af37.tar.bz2
scummvm-rg350-de8da01b0e8a309b9ed3f5b0f152ebbcf8f4af37.zip
SDL: Remove side effect of setlocale() call to get Language.
This is to fix bug #3615148 - "ALL: sscanf("%f"), atof() etc. not portable due to Locale" The side effect of setlocale("") is to change the active locale from the default of "C" to the detected system locale, but this changes the behaviour of sscanf() and several other functions in a system dependent and non-portable way. This has caused bugs in the ZVISION engine when running Zork Nemesis. The solution is to restore the default "C" locale after the call to get the language. Thanks to criezy for working out this fix.
Diffstat (limited to 'backends/platform/sdl/sdl.cpp')
-rw-r--r--backends/platform/sdl/sdl.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index c240727069..508c5f4e92 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -393,6 +393,11 @@ Common::String OSystem_SDL::getSystemLanguage() const {
#else // WIN32
// Activating current locale settings
const char *locale = setlocale(LC_ALL, "");
+
+ // Restore default C locale to prevent issues with
+ // portability of sscanf(), atof(), etc.
+ // See bug #3615148
+ setlocale(LC_ALL, "C");
// Detect the language from the locale
if (!locale) {