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
|
float
|
||||||
strtof_l (const char *__restrict s00, char **__restrict se, locale_t loc)
|
strtof_l (const char *__restrict s00, char **__restrict se, locale_t loc)
|
||||||
{
|
{
|
||||||
double retval = _strtod_l (_REENT, s00, se, loc);
|
double val = _strtod_l (_REENT, s00, se, loc);
|
||||||
if (isnan (retval))
|
if (isnan (val))
|
||||||
return nanf (NULL);
|
return nanf (NULL);
|
||||||
|
float retval = (float) val;
|
||||||
|
#ifndef NO_ERRNO
|
||||||
|
if (isinf (retval) && !isinf (val))
|
||||||
|
_REENT->_errno = ERANGE;
|
||||||
|
#endif
|
||||||
return (float)retval;
|
return (float)retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1304,9 +1309,14 @@ _DEFUN (strtof, (s00, se),
|
||||||
_CONST char *__restrict s00 _AND
|
_CONST char *__restrict s00 _AND
|
||||||
char **__restrict se)
|
char **__restrict se)
|
||||||
{
|
{
|
||||||
double retval = _strtod_l (_REENT, s00, se, __get_current_locale ());
|
double val = _strtod_l (_REENT, s00, se, __get_current_locale ());
|
||||||
if (isnan (retval))
|
if (isnan (val))
|
||||||
return nanf (NULL);
|
return nanf (NULL);
|
||||||
|
float retval = (float) val;
|
||||||
|
#ifndef NO_ERRNO
|
||||||
|
if (isinf (retval) && !isinf (val))
|
||||||
|
_REENT->_errno = ERANGE;
|
||||||
|
#endif
|
||||||
return (float)retval;
|
return (float)retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -274,9 +274,14 @@ float
|
||||||
wcstof_l (const wchar_t *__restrict nptr, wchar_t **__restrict endptr,
|
wcstof_l (const wchar_t *__restrict nptr, wchar_t **__restrict endptr,
|
||||||
locale_t loc)
|
locale_t loc)
|
||||||
{
|
{
|
||||||
double retval = _wcstod_l (_REENT, nptr, endptr, loc);
|
double val = _wcstod_l (_REENT, nptr, endptr, loc);
|
||||||
if (isnan (retval))
|
if (isnan (val))
|
||||||
return nanf (NULL);
|
return nanf (NULL);
|
||||||
|
float retval = (float) val;
|
||||||
|
#ifndef NO_ERRNO
|
||||||
|
if (isinf (retval) && !isinf (val))
|
||||||
|
_REENT->_errno = ERANGE;
|
||||||
|
#endif
|
||||||
return (float)retval;
|
return (float)retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -285,9 +290,15 @@ _DEFUN (wcstof, (nptr, endptr),
|
||||||
_CONST wchar_t *__restrict nptr _AND
|
_CONST wchar_t *__restrict nptr _AND
|
||||||
wchar_t **__restrict endptr)
|
wchar_t **__restrict endptr)
|
||||||
{
|
{
|
||||||
double retval = _wcstod_l (_REENT, nptr, endptr, __get_current_locale ());
|
double val = _wcstod_l (_REENT, nptr, endptr, __get_current_locale ());
|
||||||
if (isnan (retval))
|
if (isnan (val))
|
||||||
return nanf (NULL);
|
return nanf (NULL);
|
||||||
|
float retval = (float) val;
|
||||||
|
#ifndef NO_ERRNO
|
||||||
|
if (isinf (retval) && !isinf (val))
|
||||||
|
_REENT->_errno = ERANGE;
|
||||||
|
#endif
|
||||||
|
|
||||||
return (float)retval;
|
return (float)retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue