[multiple changes]
authorPaolo Carlini <paolo@gcc.gnu.org>
Sat, 4 May 2002 21:33:19 +0000 (21:33 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sat, 4 May 2002 21:33:19 +0000 (21:33 +0000)
2002-05-04  Benjamin Kosnik  <bkoz@redhat.com>
    Paolo Carlini  <pcarlini@unitus.it>

* testsuite/22_locale/num_put_members_char.cc: Add test04(),
testing for the locale_facets.tcc entry of the previous commit.
* testsuite/22_locale/num_put_members_wchar_t.cc: Likewise.

2002-05-04  Takeshi Kobayakawa  <tskoba@mte.biglobe.ne.jp>

* config/locale/generic/c_locale.cc
(__convert_to_v(float, double, long double)):
Fix the temporary switch to the "C" locale, saving and
restoring in the proper way the current locale.
* config/locale/generic/time_members.cc
(__timepunct<char, wchar_t>::_M_put): Likewise.
* config/locale/gnu/messages_members.cc
(messages<char>::do_get): Likewise.
* config/locale/gnu/messages_members.h
(messages<_CharT>::do_get): Likewise.
* config/locale/gnu/time_members.cc
(__timepunct<char, wchar_t>::_M_put): Likewise.
* include/bits/locale_facets.tcc (__convert_from_v): Likewise.

From-SVN: r53167

libstdc++-v3/ChangeLog
libstdc++-v3/config/locale/generic/c_locale.cc
libstdc++-v3/config/locale/generic/time_members.cc
libstdc++-v3/config/locale/gnu/messages_members.cc
libstdc++-v3/config/locale/gnu/messages_members.h
libstdc++-v3/config/locale/gnu/time_members.cc
libstdc++-v3/include/bits/locale_facets.tcc
libstdc++-v3/testsuite/22_locale/num_put_members_char.cc
libstdc++-v3/testsuite/22_locale/num_put_members_wchar_t.cc

index edb9ddcb81efe4d13c948ad6c9121c2855afbc20..03939a0b6b12352903b7dcb47891399953cc5fb6 100644 (file)
@@ -1,3 +1,26 @@
+2002-05-04  Benjamin Kosnik  <bkoz@redhat.com>
+           Paolo Carlini  <pcarlini@unitus.it>
+
+       * testsuite/22_locale/num_put_members_char.cc: Add test04(),
+       testing for the locale_facets.tcc entry of the previous commit.
+       * testsuite/22_locale/num_put_members_wchar_t.cc: Likewise.
+
+2002-05-04  Takeshi Kobayakawa  <tskoba@mte.biglobe.ne.jp>
+
+       * config/locale/generic/c_locale.cc
+       (__convert_to_v(float, double, long double)):
+       Fix the temporary switch to the "C" locale, saving and
+       restoring in the proper way the current locale.
+       * config/locale/generic/time_members.cc
+       (__timepunct<char, wchar_t>::_M_put): Likewise.
+       * config/locale/gnu/messages_members.cc
+       (messages<char>::do_get): Likewise.
+       * config/locale/gnu/messages_members.h
+       (messages<_CharT>::do_get): Likewise.
+       * config/locale/gnu/time_members.cc
+       (__timepunct<char, wchar_t>::_M_put): Likewise.
+       * include/bits/locale_facets.tcc (__convert_from_v): Likewise.
+
 2002-05-04  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * configure.in (AC_CHECK_HEADERS): Check for string.h & stdlib.h.
index 8ede46ec2dd171eeb518066cbe39d8f85df0ef0b..e274836fd901d39de172da81f3bcef09335705f2 100644 (file)
@@ -120,7 +120,8 @@ namespace std
       if (!(__err & ios_base::failbit))
        {
          // Assumes __s formatted for "C" locale.
-         const char* __old = setlocale(LC_ALL, "C");
+         char* __old = strdup(setlocale(LC_ALL, NULL));
+         setlocale(LC_ALL, "C");
          char* __sanity;
          errno = 0;
 #if defined(_GLIBCPP_USE_C99)
@@ -147,6 +148,7 @@ namespace std
          else
            __err |= ios_base::failbit;
          setlocale(LC_ALL, __old);
+         free(__old);
        }
     }
 
@@ -158,7 +160,8 @@ namespace std
       if (!(__err & ios_base::failbit))
        {
          // Assumes __s formatted for "C" locale.
-         const char* __old = setlocale(LC_ALL, "C");
+         char* __old = strdup(setlocale(LC_ALL, NULL));
+         setlocale(LC_ALL, "C");
          char* __sanity;
          errno = 0;
          double __d = strtod(__s, &__sanity);
@@ -167,6 +170,7 @@ namespace std
          else
            __err |= ios_base::failbit;
          setlocale(LC_ALL, __old);
+         free(__old);
        }
     }
 
@@ -178,7 +182,8 @@ namespace std
       if (!(__err & ios_base::failbit))
        {
          // Assumes __s formatted for "C" locale.
-         const char* __old = setlocale(LC_ALL, "C");
+         char* __old = strdup(setlocale(LC_ALL, NULL));
+         setlocale(LC_ALL, "C");
 #if defined(_GLIBCPP_USE_C99)
          char* __sanity;
          errno = 0;
@@ -202,6 +207,7 @@ namespace std
          else
            __err |= ios_base::failbit;
          setlocale(LC_ALL, __old);
+         free(__old);
        }
     }
 
index 16a4998cead9b33f4d1faca655e5a929484d8601..d02f0c3fa0eaf0e1a3dd30efc39703526064e04f 100644 (file)
@@ -51,9 +51,11 @@ namespace std
     _M_put(char* __s, size_t __maxlen, const char* __format, 
           const tm* __tm) const
     {
-      const char* __old = setlocale(LC_ALL, _M_name_timepunct);
+      char* __old = strdup(setlocale(LC_ALL, NULL));
+      setlocale(LC_ALL, _M_name_timepunct);
       strftime(__s, __maxlen, __format, __tm);
       setlocale(LC_ALL, __old);
+      free(__old);
     }
 
   template<> 
@@ -132,9 +134,11 @@ namespace std
     _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, 
           const tm* __tm) const
     {
-      const char* __old = setlocale(LC_ALL, _M_name_timepunct);
+      char* __old = strdup(setlocale(LC_ALL, NULL));
+      setlocale(LC_ALL, _M_name_timepunct);
       wcsftime(__s, __maxlen, __format, __tm);
       setlocale(LC_ALL, __old);
+      free(__old);
     }
 
   template<> 
index f2020032fc2649a99080d463f5f32344b3b1fced..2717c6b55e1047541c77da7f15daf726b4c9475e 100644 (file)
@@ -48,9 +48,11 @@ namespace std
       __uselocale(__old);
       return string(__msg);
 #else
-      const char* __old = setlocale(LC_ALL, _M_name_messages);
+      char* __old = strdup(setlocale(LC_ALL, NULL));
+      setlocale(LC_ALL, _M_name_messages);
       const char* __msg = gettext(__dfault.c_str());
       setlocale(LC_ALL, __old);
+      free(__old);
       return string(__msg);
 #endif
     }
index d664d3975c8391446c42697cdfb904e714be4d24..11bfcb5044076e444e37cda7f0c18171f936a3fb 100644 (file)
       __uselocale(__old);
       return _M_convert_from_char(__msg);
 #else
-      const char* __old = setlocale(LC_ALL, _M_name_messages);
+      char* __old = strdup(setlocale(LC_ALL, NULL));
+      setlocale(LC_ALL, _M_name_messages);
       char* __msg = gettext(_M_convert_to_char(__dfault));
       setlocale(LC_ALL, __old);
+      free(__old);
       return _M_convert_from_char(__msg);
 #endif
     }
index 665ea0245be4b685f11b0774ad923bfb828b139c..ad71931056a423d2b8a0e8d2df2bf26a48a6a882 100644 (file)
@@ -54,9 +54,11 @@ namespace std
 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
       __strftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm);
 #else
-      const char* __old = setlocale(LC_ALL, _M_name_timepunct);
+      char* __old = strdup(setlocale(LC_ALL, NULL));
+      setlocale(LC_ALL, _M_name_timepunct);
       strftime(__s, __maxlen, __format, __tm);
       setlocale(LC_ALL, __old);
+      free(__old);
 #endif
     }
 
@@ -202,9 +204,11 @@ namespace std
 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
       __wcsftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm);
 #else
-      const char* __old = setlocale(LC_ALL, _M_name_timepunct);
+      char* __old = strdup(setlocale(LC_ALL, NULL));
+      setlocale(LC_ALL, _M_name_timepunct);
       wcsftime(__s, __maxlen, __format, __tm);
       setlocale(LC_ALL, __old);
+      free(__old);
 #endif
     }
 
index d362c33f87fbcf0cfd097259d86d55942ade82f9..dea2fdfdac24b2f481dfe0b2cd8536c455e61b65 100644 (file)
@@ -1959,12 +1959,14 @@ namespace std
                     _Tv __v, const __c_locale&, int __prec = -1)
     {
       int __ret;
-      const char* __old = setlocale(LC_ALL, "C");
+      char* __old = strdup(setlocale(LC_ALL, NULL));
+      setlocale(LC_ALL, "C");
       if (__prec >= 0)
         __ret = snprintf(__out, __size, __fmt, __prec, __v);
       else
         __ret = snprintf(__out, __size, __fmt, __v);
       setlocale(LC_ALL, __old);
+      free(__old);
       return __ret;
     }
 #else
@@ -1974,12 +1976,14 @@ namespace std
                     const __c_locale&, int __prec = -1)
     {
       int __ret;
-      const char* __old = setlocale(LC_ALL, "C");
+      char* __old = strdup(setlocale(LC_ALL, NULL));
+      setlocale(LC_ALL, "C");
       if (__prec >= 0)
         __ret = sprintf(__out, __fmt, __prec, __v);
       else
         __ret = sprintf(__out, __fmt, __v);
       setlocale(LC_ALL, __old);
+      free(__old);
       return __ret;
     }
 #endif
index 8505566be166b50e2e3f770aa247e40848fdf470..09630833d225bf7e15b4860cf4789d53ccc65fbe 100644 (file)
@@ -310,11 +310,23 @@ void test03()
 #endif
 }
 
+void test04()
+{
+  bool test = true;
+
+  std::string loc1 = setlocale(LC_ALL, "ja_JP.eucjp");
+  test01();
+  test02();
+  std::string loc2 = setlocale(LC_ALL, NULL);
+  VERIFY( loc1 == loc2 );
+}
+
 int main()
 {
   test01();
   test02();
   test03();
+  test04();
   return 0;
 }
 
index d2309f0d4341bfd6e5b9cbac8fcbdbd52aefb267..f3ac69238bf18ce0e31c215799e3849ddabd7ef3 100644 (file)
@@ -309,6 +309,17 @@ void test03()
     }
 #endif
 }
+
+void test04()
+{
+  bool test = true;
+
+  std::string loc1 = setlocale(LC_ALL, "ja_JP.eucjp");
+  test01();
+  test02();
+  std::string loc2 = setlocale(LC_ALL, NULL);
+  VERIFY( loc1 == loc2 );
+}
 #endif
 
 int main()
@@ -317,6 +328,7 @@ int main()
   test01();
   test02();
   test03();
+  test04();
 #endif
   return 0;
 }