]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ctype_members.cc (ctype<wchar_t>::do_widen(char)): Switch to _M_c_locale_ctype around...
authorJakub Jelinek <jakub@redhat.com>
Thu, 5 Sep 2002 07:54:26 +0000 (09:54 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 5 Sep 2002 07:54:26 +0000 (09:54 +0200)
* config/locale/gnu/ctype_members.cc (ctype<wchar_t>::do_widen(char)):
Switch to _M_c_locale_ctype around btowc call.
(ctype<wchar_t>::do_widen(const char*, const char *, wchar_t*)):
Switch to _M_c_locale_ctype around mbsrtowcs call.
(ctype<wchar_t>::do_narrow(char)): Switch to _M_c_locale_ctype around
wctob call.
(ctype<wchar_t>::do_narrow(const char*, const char *, wchar_t*)):
Switch to _M_c_locale_ctype around wcsrtombs call.

From-SVN: r56841

libstdc++-v3/ChangeLog
libstdc++-v3/config/locale/gnu/ctype_members.cc

index 06cf2a0ba7ab91202929eaff93b2a9c41046d250..f96da8b649406eee036382944f71a10d7764b155 100644 (file)
@@ -1,3 +1,14 @@
+2002-09-05  Jakub Jelinek  <jakub@redhat.com>
+
+       * config/locale/gnu/ctype_members.cc (ctype<wchar_t>::do_widen(char)):
+       Switch to _M_c_locale_ctype around btowc call.
+       (ctype<wchar_t>::do_widen(const char*, const char *, wchar_t*)):
+       Switch to _M_c_locale_ctype around mbsrtowcs call.
+       (ctype<wchar_t>::do_narrow(char)): Switch to _M_c_locale_ctype around
+       wctob call.
+       (ctype<wchar_t>::do_narrow(const char*, const char *, wchar_t*)):
+       Switch to _M_c_locale_ctype around wcsrtombs call.
+
 2002-09-05  Jakub Jelinek  <jakub@redhat.com>
 
        * config/locale/gnu/monetary_members.cc
index 18c3a82509428aa38bdf61c924055a0066d02d15..db1e356d038127be553918e4042e912a3ddc864d 100644 (file)
@@ -166,15 +166,30 @@ namespace std
   wchar_t
   ctype<wchar_t>::
   do_widen(char __c) const
-  { return btowc(__c); }
-  
+  {
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+    __c_locale __old = __uselocale(_M_c_locale_ctype);
+#endif
+    wchar_t __ret = btowc(__c);
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+    __uselocale(__old);
+#endif
+    return __ret;
+  }
+
   const char* 
   ctype<wchar_t>::
   do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
   {
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+    __c_locale __old = __uselocale(_M_c_locale_ctype);
+#endif
     mbstate_t __state;
     memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
     mbsrtowcs(__dest, &__lo, __hi - __lo, &__state);
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+    __uselocale(__old);
+#endif
     return __hi;
   }
 
@@ -182,7 +197,13 @@ namespace std
   ctype<wchar_t>::
   do_narrow(wchar_t __wc, char __dfault) const
   { 
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+    __c_locale __old = __uselocale(_M_c_locale_ctype);
+#endif
     int __c = wctob(__wc);
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+    __uselocale(__old);
+#endif
     return (__c == EOF ? __dfault : static_cast<char>(__c)); 
   }
 
@@ -191,6 +212,9 @@ namespace std
   do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, 
            char* __dest) const
   {
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+    __c_locale __old = __uselocale(_M_c_locale_ctype);
+#endif
     size_t __offset = 0;
     while (true)
       {
@@ -208,6 +232,9 @@ namespace std
        else
          break;
       }
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+    __uselocale(__old);
+#endif
     return __hi;
   }
 #endif //  _GLIBCPP_USE_WCHAR_T