blob: 0d83acec880faa7661d7c95bb49105d1f39ad76c [file] [log] [blame]
/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#include <stdlib.h>
#include <float.h>
#include <errno.h>
#include <math.h>
#include <locale.h>
float _strtof_l( const char *nptr, char **endptr, _locale_t _Locale)
{
const double ret = _strtod_l(nptr, endptr, _Locale);
if (isfinite(ret)) {
/* Check for cases that aren't out of range for doubles, but that are
* for floats. */
if (ret > FLT_MAX)
errno = ERANGE;
else if (ret < -FLT_MAX)
errno = ERANGE;
else if (ret > 0 && ret < FLT_MIN)
errno = ERANGE;
else if (ret < 0 && ret > -FLT_MIN)
errno = ERANGE;
}
return ret;
}