re PR libstdc++/7811 (default locale not taken from environment)
authorPaolo Carlini <pcarlini@unitus.it>
Thu, 5 Sep 2002 21:13:07 +0000 (23:13 +0200)
committerPaolo Carlini <paolo@gcc.gnu.org>
Thu, 5 Sep 2002 21:13:07 +0000 (21:13 +0000)
2002-09-05  Paolo Carlini  <pcarlini@unitus.it>
    Roland McGrath  <roland@redhat.com>

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 <roland@redhat.com>
From-SVN: r56865

libstdc++-v3/ChangeLog
libstdc++-v3/src/locale.cc
libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc

index 07f92a87a80a8dddc9f2ab7aa5092417c313d82a..89804df52952fd53912968da100ff7e0b866d28b 100644 (file)
@@ -1,3 +1,11 @@
+2002-09-05  Paolo Carlini  <pcarlini@unitus.it>
+            Roland McGrath  <roland@redhat.com>
+
+       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  <jakub@redhat.com>
 
        * config/abi/ia64-unknown-linux-gnu: Add.
index 3cb9d1b4cbfd1f569b700add610f38263c66b364..99c8c67144b34a87d28f192fc86139f1dcfbf9e6 100644 (file)
@@ -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);
       }
index 94db3bcc139675406e0e73376b6743f2f762e839..a27b2457e874245f042f81adf5597caae21af98c 100644 (file)
@@ -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;
 }