From e2cbee7fd1d126a404e33321057392c5777db950 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Thu, 5 Sep 2002 23:13:07 +0200 Subject: [PATCH] re PR libstdc++/7811 (default locale not taken from environment) 2002-09-05 Paolo Carlini Roland McGrath PR libstdc++/7811 * src/locale.cc (locale::locale(__s)): Use getenv instead of setenv for the environment locale. * testsuite/22_locale/ctor_copy_dtor.cc (test03): New. Co-Authored-By: Roland McGrath From-SVN: r56865 --- libstdc++-v3/ChangeLog | 8 ++++++++ libstdc++-v3/src/locale.cc | 10 +++++++++- .../testsuite/22_locale/ctor_copy_dtor.cc | 16 ++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 07f92a87a80..89804df5295 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2002-09-05 Paolo Carlini + Roland McGrath + + PR libstdc++/7811 + * src/locale.cc (locale::locale(__s)): Use getenv instead + of setenv for the environment locale. + * testsuite/22_locale/ctor_copy_dtor.cc (test03): New. + 2002-09-05 Jakub Jelinek * config/abi/ia64-unknown-linux-gnu: Add. diff --git a/libstdc++-v3/src/locale.cc b/libstdc++-v3/src/locale.cc index 3cb9d1b4cbf..99c8c67144b 100644 --- a/libstdc++-v3/src/locale.cc +++ b/libstdc++-v3/src/locale.cc @@ -202,7 +202,15 @@ namespace std if (strcmp(__s, "C") == 0 || strcmp(__s, "POSIX") == 0) (_M_impl = _S_classic)->_M_add_reference(); else if (strcmp(__s, "") == 0) - _M_impl = new _Impl(setlocale(LC_ALL, NULL), 1); + { + char* __env = getenv("LC_ALL"); + if (__env) + _M_impl = new _Impl(__env, 1); + else if ((__env = getenv("LANG"))) + _M_impl = new _Impl(__env, 1); + else + (_M_impl = _S_classic)->_M_add_reference(); + } else _M_impl = new _Impl(__s, 1); } diff --git a/libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc b/libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc index 94db3bcc139..a27b2457e87 100644 --- a/libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc +++ b/libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc @@ -310,6 +310,21 @@ void test02() VERIFY( loc_1 == loc_2 ); } +// libstdc++/7811 +void test03() +{ + bool test = true; +#ifdef _GLIBCPP_HAVE_SETENV + const char* oldLANG = getenv("LANG"); + if (!setenv("LANG", "it_IT", 1)) + { + std::locale loc(""); + VERIFY( loc.name() == "it_IT" ); + setenv("LANG", oldLANG ? oldLANG : "", 1); + } +#endif +} + int main() { test00(); @@ -319,6 +334,7 @@ int main() #endif test02(); + test03(); return 0; } -- 2.30.2