From 39c38fb38688f9d53d40d201f4aba967cad54559 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Sun, 7 Oct 2018 16:07:10 +0200 Subject: [PATCH] Fix a side effect of our LOCALE_IO by using setlocale( LC_NUMERIC, "C" ) instead of setlocale( LC_ALL, "C" ) LC_NUMERIC is the right option to use in LOCALE_IO because only the floating point separator must be modified When using LC_ALL, the Env var expansion wxGetEnv() was not working when the env var contains non ascii7 codes after a call to LOCALE_IO. When using setlocale( LC_NUMERIC, "C" ) in LOCALE_IO, wxGetEnv() works fine. Fixes: lp:1795990 https://bugs.launchpad.net/kicad/+bug/1795990 --- common/common.cpp | 6 +++--- common/pgm_base.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/common.cpp b/common/common.cpp index a4c0e965cf..9a6ec3d951 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -66,9 +66,9 @@ LOCALE_IO::LOCALE_IO() if( m_c_count++ == 0 ) { // Store the user locale name, to restore this locale later, in dtor - m_user_locale = setlocale( LC_ALL, 0 ); + m_user_locale = setlocale( LC_NUMERIC, nullptr ); // Switch the locale to C locale, to read/write files with fp numbers - setlocale( LC_ALL, "C" ); + setlocale( LC_NUMERIC, "C" ); } } @@ -79,7 +79,7 @@ LOCALE_IO::~LOCALE_IO() if( --m_c_count == 0 ) { // revert to the user locale - setlocale( LC_ALL, m_user_locale.c_str() ); + setlocale( LC_NUMERIC, m_user_locale.c_str() ); } } diff --git a/common/pgm_base.cpp b/common/pgm_base.cpp index 117fbde534..c95c855f8c 100644 --- a/common/pgm_base.cpp +++ b/common/pgm_base.cpp @@ -831,7 +831,7 @@ bool PGM_BASE::SetLanguage( bool first_time ) if( result != dtst ) // string to double encode/decode does not work! Bug detected: // Disable floating point localization: - setlocale( LC_ALL, "C" ); + setlocale( LC_NUMERIC, "C" ); if( !m_locale->IsLoaded( dictionaryName ) ) m_locale->AddCatalog( dictionaryName );