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
This commit is contained in:
Paolo Carlini 2004-03-31 09:13:10 +00:00 committed by Paolo Carlini
parent 0ba13880d1
commit e004c3313e
2 changed files with 9 additions and 7 deletions

View File

@ -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

View File

@ -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