--- libstdc++-v3/config/locale/gnu/ctype_members.cc.jj 2002-08-30 12:09:12.000000000 +0200 +++ libstdc++-v3/config/locale/gnu/ctype_members.cc 2002-09-02 15:25:15.000000000 +0200 @@ -166,15 +166,30 @@ namespace std wchar_t ctype:: 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:: 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(&__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:: 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(__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