aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@unitus.it>2002-09-05 23:13:07 +0200
committerPaolo Carlini <paolo@gcc.gnu.org>2002-09-05 21:13:07 +0000
commite2cbee7fd1d126a404e33321057392c5777db950 (patch)
tree04d7512b4857d0931c9bdb1ce34ae5d6b7799f97
parentb3fbfc0766b57cc52e1398e131161df6c7bb1ef7 (diff)
downloadgcc-e2cbee7fd1d126a404e33321057392c5777db950.zip
gcc-e2cbee7fd1d126a404e33321057392c5777db950.tar.gz
gcc-e2cbee7fd1d126a404e33321057392c5777db950.tar.bz2
re PR libstdc++/7811 (default locale not taken from environment)
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
-rw-r--r--libstdc++-v3/ChangeLog8
-rw-r--r--libstdc++-v3/src/locale.cc10
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc16
3 files changed, 33 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 07f92a8..89804df 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -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.
diff --git a/libstdc++-v3/src/locale.cc b/libstdc++-v3/src/locale.cc
index 3cb9d1b..99c8c67 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 94db3bc..a27b245 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;
}