diff options
author | Paolo Carlini <paolo@gcc.gnu.org> | 2002-05-04 21:33:19 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2002-05-04 21:33:19 +0000 |
commit | 6d030676cc896eeb605f7997f76942a7734b661b (patch) | |
tree | 2ef4c6b0b0f478842b00f63616c13f0a8e6a2dce | |
parent | 7e90efc40343d2aceb75acae7479dc5cf7d3d4fa (diff) | |
download | gcc-6d030676cc896eeb605f7997f76942a7734b661b.zip gcc-6d030676cc896eeb605f7997f76942a7734b661b.tar.gz gcc-6d030676cc896eeb605f7997f76942a7734b661b.tar.bz2 |
[multiple changes]
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
-rw-r--r-- | libstdc++-v3/ChangeLog | 23 | ||||
-rw-r--r-- | libstdc++-v3/config/locale/generic/c_locale.cc | 12 | ||||
-rw-r--r-- | libstdc++-v3/config/locale/generic/time_members.cc | 8 | ||||
-rw-r--r-- | libstdc++-v3/config/locale/gnu/messages_members.cc | 4 | ||||
-rw-r--r-- | libstdc++-v3/config/locale/gnu/messages_members.h | 4 | ||||
-rw-r--r-- | libstdc++-v3/config/locale/gnu/time_members.cc | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/locale_facets.tcc | 8 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/22_locale/num_put_members_char.cc | 12 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/22_locale/num_put_members_wchar_t.cc | 12 |
9 files changed, 80 insertions, 11 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index edb9ddc..03939a0 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -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. diff --git a/libstdc++-v3/config/locale/generic/c_locale.cc b/libstdc++-v3/config/locale/generic/c_locale.cc index 8ede46e..e274836f 100644 --- a/libstdc++-v3/config/locale/generic/c_locale.cc +++ b/libstdc++-v3/config/locale/generic/c_locale.cc @@ -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); } } diff --git a/libstdc++-v3/config/locale/generic/time_members.cc b/libstdc++-v3/config/locale/generic/time_members.cc index 16a4998..d02f0c3 100644 --- a/libstdc++-v3/config/locale/generic/time_members.cc +++ b/libstdc++-v3/config/locale/generic/time_members.cc @@ -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<> diff --git a/libstdc++-v3/config/locale/gnu/messages_members.cc b/libstdc++-v3/config/locale/gnu/messages_members.cc index f202003..2717c6b 100644 --- a/libstdc++-v3/config/locale/gnu/messages_members.cc +++ b/libstdc++-v3/config/locale/gnu/messages_members.cc @@ -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 } diff --git a/libstdc++-v3/config/locale/gnu/messages_members.h b/libstdc++-v3/config/locale/gnu/messages_members.h index d664d39..11bfcb5 100644 --- a/libstdc++-v3/config/locale/gnu/messages_members.h +++ b/libstdc++-v3/config/locale/gnu/messages_members.h @@ -65,9 +65,11 @@ __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 } diff --git a/libstdc++-v3/config/locale/gnu/time_members.cc b/libstdc++-v3/config/locale/gnu/time_members.cc index 665ea02..ad71931 100644 --- a/libstdc++-v3/config/locale/gnu/time_members.cc +++ b/libstdc++-v3/config/locale/gnu/time_members.cc @@ -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 } diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc index d362c33..dea2fdf 100644 --- a/libstdc++-v3/include/bits/locale_facets.tcc +++ b/libstdc++-v3/include/bits/locale_facets.tcc @@ -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 diff --git a/libstdc++-v3/testsuite/22_locale/num_put_members_char.cc b/libstdc++-v3/testsuite/22_locale/num_put_members_char.cc index 8505566..0963083 100644 --- a/libstdc++-v3/testsuite/22_locale/num_put_members_char.cc +++ b/libstdc++-v3/testsuite/22_locale/num_put_members_char.cc @@ -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; } diff --git a/libstdc++-v3/testsuite/22_locale/num_put_members_wchar_t.cc b/libstdc++-v3/testsuite/22_locale/num_put_members_wchar_t.cc index d2309f0..f3ac692 100644 --- a/libstdc++-v3/testsuite/22_locale/num_put_members_wchar_t.cc +++ b/libstdc++-v3/testsuite/22_locale/num_put_members_wchar_t.cc @@ -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; } |