2016-12-15 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* libc/stdlib/strtod.c (strtof_l): Set errno to ERANGE when double to float conversion results in infinity. (strtof): Likewise. * libc/stdlib/wcstod.c (wcstof_l): Likewise. (wcstof): Likewise.
This commit is contained in:
parent
05272960ab
commit
dd4a4baab0
|
@ -1293,9 +1293,14 @@ _DEFUN (strtod, (s00, se),
|
|||
float
|
||||
strtof_l (const char *__restrict s00, char **__restrict se, locale_t loc)
|
||||
{
|
||||
double retval = _strtod_l (_REENT, s00, se, loc);
|
||||
if (isnan (retval))
|
||||
double val = _strtod_l (_REENT, s00, se, loc);
|
||||
if (isnan (val))
|
||||
return nanf (NULL);
|
||||
float retval = (float) val;
|
||||
#ifndef NO_ERRNO
|
||||
if (isinf (retval) && !isinf (val))
|
||||
_REENT->_errno = ERANGE;
|
||||
#endif
|
||||
return (float)retval;
|
||||
}
|
||||
|
||||
|
@ -1304,9 +1309,14 @@ _DEFUN (strtof, (s00, se),
|
|||
_CONST char *__restrict s00 _AND
|
||||
char **__restrict se)
|
||||
{
|
||||
double retval = _strtod_l (_REENT, s00, se, __get_current_locale ());
|
||||
if (isnan (retval))
|
||||
double val = _strtod_l (_REENT, s00, se, __get_current_locale ());
|
||||
if (isnan (val))
|
||||
return nanf (NULL);
|
||||
float retval = (float) val;
|
||||
#ifndef NO_ERRNO
|
||||
if (isinf (retval) && !isinf (val))
|
||||
_REENT->_errno = ERANGE;
|
||||
#endif
|
||||
return (float)retval;
|
||||
}
|
||||
|
||||
|
|
|
@ -274,9 +274,14 @@ float
|
|||
wcstof_l (const wchar_t *__restrict nptr, wchar_t **__restrict endptr,
|
||||
locale_t loc)
|
||||
{
|
||||
double retval = _wcstod_l (_REENT, nptr, endptr, loc);
|
||||
if (isnan (retval))
|
||||
double val = _wcstod_l (_REENT, nptr, endptr, loc);
|
||||
if (isnan (val))
|
||||
return nanf (NULL);
|
||||
float retval = (float) val;
|
||||
#ifndef NO_ERRNO
|
||||
if (isinf (retval) && !isinf (val))
|
||||
_REENT->_errno = ERANGE;
|
||||
#endif
|
||||
return (float)retval;
|
||||
}
|
||||
|
||||
|
@ -285,9 +290,15 @@ _DEFUN (wcstof, (nptr, endptr),
|
|||
_CONST wchar_t *__restrict nptr _AND
|
||||
wchar_t **__restrict endptr)
|
||||
{
|
||||
double retval = _wcstod_l (_REENT, nptr, endptr, __get_current_locale ());
|
||||
if (isnan (retval))
|
||||
double val = _wcstod_l (_REENT, nptr, endptr, __get_current_locale ());
|
||||
if (isnan (val))
|
||||
return nanf (NULL);
|
||||
float retval = (float) val;
|
||||
#ifndef NO_ERRNO
|
||||
if (isinf (retval) && !isinf (val))
|
||||
_REENT->_errno = ERANGE;
|
||||
#endif
|
||||
|
||||
return (float)retval;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue