From: Jakub Jelinek Date: Thu, 5 Sep 2002 07:51:16 +0000 (+0200) Subject: monetary_members.cc (moneypunct::_M_initialize_moneypunct, moneypunct::_M_initialize_moneypunct): Use __uselocale instead of setlocale for glibc 2.3. From-SVN: r56839 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index f3dd059d929..06cf2a0ba7a 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2002-09-05 Jakub Jelinek + + * config/locale/gnu/monetary_members.cc + (moneypunct::_M_initialize_moneypunct, + moneypunct::_M_initialize_moneypunct): Use + __uselocale instead of setlocale for glibc 2.3. + 2002-09-05 Jakub Jelinek * config/locale/generic/c++locale_internal.h: New header. diff --git a/libstdc++-v3/config/locale/gnu/monetary_members.cc b/libstdc++-v3/config/locale/gnu/monetary_members.cc index bc915af0b15..68b154bdc7c 100644 --- a/libstdc++-v3/config/locale/gnu/monetary_members.cc +++ b/libstdc++-v3/config/locale/gnu/monetary_members.cc @@ -335,9 +335,13 @@ namespace std else { // Named locale. - // XXX Fix me. Switch to named locale so that mbsrtowcs will work. +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) + __c_locale __old = __uselocale(__cloc); +#else + // Switch to named locale so that mbsrtowcs will work. char* __old = strdup(setlocale(LC_ALL, NULL)); setlocale(LC_ALL, __name); +#endif _M_decimal_point = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w); @@ -400,9 +404,12 @@ namespace std char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc)); _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn); - // XXX +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) + __uselocale(__old); +#else setlocale(LC_ALL, __old); free(__old); +#endif } } @@ -427,9 +434,13 @@ namespace std else { // Named locale. - // XXX Fix me. Switch to named locale so that mbsrtowcs will work. +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) + __c_locale __old = __uselocale(__cloc); +#else + // Switch to named locale so that mbsrtowcs will work. char* __old = strdup(setlocale(LC_ALL, NULL)); setlocale(LC_ALL, __name); +#endif _M_decimal_point = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w); _M_thousands_sep = static_cast(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w); @@ -491,9 +502,12 @@ namespace std char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc)); _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn); - // XXX +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) + __uselocale(__old); +#else setlocale(LC_ALL, __old); free(__old); +#endif } }