diff options
author | Paolo Carlini <pcarlini@suse.de> | 2004-03-31 09:13:10 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2004-03-31 09:13:10 +0000 |
commit | e004c3313e6aaa46af99e823e98ebc32be8757a2 (patch) | |
tree | dd8ec0ce5aa81adc4fe5879c79e666b5549e04a2 | |
parent | 0ba13880d1d6fd88391591b05ac33273ef182e79 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/config/locale/generic/c_locale.cc | 9 |
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 |