Merged revisions 72257 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r72257 | mark.dickinson | 2009-05-03 23:33:34 +0100 (Sun, 03 May 2009) | 2 lines Don't use PyOS_strnicmp for NaN and Inf detection: it's locale-aware. ........
This commit is contained in:
parent
aa77d26009
commit
129ab1d809
|
@ -63,6 +63,19 @@ _PyOS_ascii_strtod(const char *nptr, char **endptr)
|
||||||
correctly rounded results.
|
correctly rounded results.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Case-insensitive string match used for nan and inf detection; t should be
|
||||||
|
lower-case. Returns 1 for a successful match, 0 otherwise. */
|
||||||
|
|
||||||
|
static int
|
||||||
|
case_insensitive_match(const char *s, const char *t)
|
||||||
|
{
|
||||||
|
while(*t && Py_TOLOWER(*s) == *t) {
|
||||||
|
s++;
|
||||||
|
t++;
|
||||||
|
}
|
||||||
|
return *t ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
double
|
double
|
||||||
_PyOS_ascii_strtod(const char *nptr, char **endptr)
|
_PyOS_ascii_strtod(const char *nptr, char **endptr)
|
||||||
{
|
{
|
||||||
|
@ -107,9 +120,9 @@ _PyOS_ascii_strtod(const char *nptr, char **endptr)
|
||||||
|
|
||||||
/* Parse infinities and nans */
|
/* Parse infinities and nans */
|
||||||
if (*p == 'i' || *p == 'I') {
|
if (*p == 'i' || *p == 'I') {
|
||||||
if (PyOS_strnicmp(p, "inf", 3) == 0) {
|
if (case_insensitive_match(p+1, "nf")) {
|
||||||
val = Py_HUGE_VAL;
|
val = Py_HUGE_VAL;
|
||||||
if (PyOS_strnicmp(p+3, "inity", 5) == 0)
|
if (case_insensitive_match(p+3, "inity"))
|
||||||
fail_pos = (char *)p+8;
|
fail_pos = (char *)p+8;
|
||||||
else
|
else
|
||||||
fail_pos = (char *)p+3;
|
fail_pos = (char *)p+3;
|
||||||
|
@ -120,7 +133,7 @@ _PyOS_ascii_strtod(const char *nptr, char **endptr)
|
||||||
}
|
}
|
||||||
#ifdef Py_NAN
|
#ifdef Py_NAN
|
||||||
if (*p == 'n' || *p == 'N') {
|
if (*p == 'n' || *p == 'N') {
|
||||||
if (PyOS_strnicmp(p, "nan", 3) == 0) {
|
if (case_insensitive_match(p+1, "an")) {
|
||||||
val = Py_NAN;
|
val = Py_NAN;
|
||||||
fail_pos = (char *)p+3;
|
fail_pos = (char *)p+3;
|
||||||
goto got_val;
|
goto got_val;
|
||||||
|
|
Loading…
Reference in New Issue