aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo@gcc.gnu.org>2002-05-04 21:33:19 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2002-05-04 21:33:19 +0000
commit6d030676cc896eeb605f7997f76942a7734b661b (patch)
tree2ef4c6b0b0f478842b00f63616c13f0a8e6a2dce
parent7e90efc40343d2aceb75acae7479dc5cf7d3d4fa (diff)
downloadgcc-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/ChangeLog23
-rw-r--r--libstdc++-v3/config/locale/generic/c_locale.cc12
-rw-r--r--libstdc++-v3/config/locale/generic/time_members.cc8
-rw-r--r--libstdc++-v3/config/locale/gnu/messages_members.cc4
-rw-r--r--libstdc++-v3/config/locale/gnu/messages_members.h4
-rw-r--r--libstdc++-v3/config/locale/gnu/time_members.cc8
-rw-r--r--libstdc++-v3/include/bits/locale_facets.tcc8
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put_members_char.cc12
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put_members_wchar_t.cc12
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;
}