aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@suse.de>2004-03-31 09:13:10 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2004-03-31 09:13:10 +0000
commite004c3313e6aaa46af99e823e98ebc32be8757a2 (patch)
treedd8ec0ce5aa81adc4fe5879c79e666b5549e04a2
parent0ba13880d1d6fd88391591b05ac33273ef182e79 (diff)
downloadgcc-e004c3313e6aaa46af99e823e98ebc32be8757a2.zip
gcc-e004c3313e6aaa46af99e823e98ebc32be8757a2.tar.gz
gcc-e004c3313e6aaa46af99e823e98ebc32be8757a2.tar.bz2
c_locale.cc (__convert_to_v(long double&)): In v3 uses of sscanf...
2004-03-31 Paolo Carlini <pcarlini@suse.de> * config/locale/generic/c_locale.cc (__convert_to_v(long double&)): In v3 uses of sscanf, the special floating-point numbers INF, INFINITY, etc., cannot occur in input, therefore, if the latter is too large, ERANGE is always stored in errno, no need of finitel. From-SVN: r80247
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/config/locale/generic/c_locale.cc9
2 files changed, 9 insertions, 7 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index d78e3a9..193a6a5 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,10 @@
+2004-03-31 Paolo Carlini <pcarlini@suse.de>
+
+ * config/locale/generic/c_locale.cc (__convert_to_v(long double&)):
+ In v3 uses of sscanf, the special floating-point numbers INF,
+ INFINITY, etc., cannot occur in input, therefore, if the latter
+ is too large, ERANGE is always stored in errno, no need of finitel.
+
2004-03-30 Benjamin Kosnik <bkoz@redhat.com>
PR libstdc++/14783
diff --git a/libstdc++-v3/config/locale/generic/c_locale.cc b/libstdc++-v3/config/locale/generic/c_locale.cc
index 730c366..e183a96 100644
--- a/libstdc++-v3/config/locale/generic/c_locale.cc
+++ b/libstdc++-v3/config/locale/generic/c_locale.cc
@@ -128,13 +128,8 @@ namespace std
long double __ld;
errno = 0;
int __p = sscanf(__s, "%Lf", &__ld);
- if (errno == ERANGE)
- __p = 0;
-#ifdef _GLIBCXX_HAVE_FINITEL
- if ((__p == 1) && !finitel (__ld))
- __p = 0;
-#endif
- if (__p && static_cast<int_type>(__p) != char_traits<char>::eof())
+ if (__p && static_cast<int_type>(__p) != char_traits<char>::eof()
+ && errno != ERANGE)
__v = __ld;
#endif
else