[Python-checkins] r72259 - in python/branches/py3k: Python/pystrtod.c
mark.dickinson
python-checkins at python.org
Mon May 4 00:36:01 CEST 2009
Author: mark.dickinson
Date: Mon May 4 00:36:01 2009
New Revision: 72259
Log:
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.
........
Modified:
python/branches/py3k/ (props changed)
python/branches/py3k/Python/pystrtod.c
Modified: python/branches/py3k/Python/pystrtod.c
==============================================================================
--- python/branches/py3k/Python/pystrtod.c (original)
+++ python/branches/py3k/Python/pystrtod.c Mon May 4 00:36:01 2009
@@ -63,6 +63,19 @@
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
_PyOS_ascii_strtod(const char *nptr, char **endptr)
{
@@ -107,9 +120,9 @@
/* Parse infinities and nans */
if (*p == 'i' || *p == 'I') {
- if (PyOS_strnicmp(p, "inf", 3) == 0) {
+ if (case_insensitive_match(p+1, "nf")) {
val = Py_HUGE_VAL;
- if (PyOS_strnicmp(p+3, "inity", 5) == 0)
+ if (case_insensitive_match(p+3, "inity"))
fail_pos = (char *)p+8;
else
fail_pos = (char *)p+3;
@@ -120,7 +133,7 @@
}
#ifdef Py_NAN
if (*p == 'n' || *p == 'N') {
- if (PyOS_strnicmp(p, "nan", 3) == 0) {
+ if (case_insensitive_match(p+1, "an")) {
val = Py_NAN;
fail_pos = (char *)p+3;
goto got_val;
More information about the Python-checkins
mailing list