diff options
| author | Gregory P. Smith <greg@krypto.org> | 2012-11-10 21:06:18 -0800 |
|---|---|---|
| committer | Gregory P. Smith <greg@krypto.org> | 2012-11-10 21:06:18 -0800 |
| commit | e289369efdb4e18f4a82ada19773bda9bd5b1781 (patch) | |
| tree | af42c874e1018ca9364a6db7e71519534d50d142 /Python/pystrtod.c | |
| parent | 33d046108c3cd4a6b0e5840f5f705aa4f5d0a342 (diff) | |
| parent | d98fd0ba8bd29a84c4fe934943ae220e61a4d21e (diff) | |
| download | cpython-e289369efdb4e18f4a82ada19773bda9bd5b1781.tar.gz | |
Fixes issue #14396: Handle the odd rare case of waitpid returning 0
when not expected in subprocess.Popen.wait().
Diffstat (limited to 'Python/pystrtod.c')
| -rw-r--r-- | Python/pystrtod.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/Python/pystrtod.c b/Python/pystrtod.c index 75e3032fb7..4ab8f08d22 100644 --- a/Python/pystrtod.c +++ b/Python/pystrtod.c @@ -22,6 +22,43 @@ case_insensitive_match(const char *s, const char *t) the successfully parsed portion of the string. On failure, return -1.0 and set *endptr to point to the start of the string. */ +#ifndef PY_NO_SHORT_FLOAT_REPR + +double +_Py_parse_inf_or_nan(const char *p, char **endptr) +{ + double retval; + const char *s; + int negate = 0; + + s = p; + if (*s == '-') { + negate = 1; + s++; + } + else if (*s == '+') { + s++; + } + if (case_insensitive_match(s, "inf")) { + s += 3; + if (case_insensitive_match(s, "inity")) + s += 5; + retval = _Py_dg_infinity(negate); + } + else if (case_insensitive_match(s, "nan")) { + s += 3; + retval = _Py_dg_stdnan(negate); + } + else { + s = p; + retval = -1.0; + } + *endptr = (char *)s; + return retval; +} + +#else + double _Py_parse_inf_or_nan(const char *p, char **endptr) { @@ -57,6 +94,8 @@ _Py_parse_inf_or_nan(const char *p, char **endptr) return retval; } +#endif + /** * _PyOS_ascii_strtod: * @nptr: the string to convert to a numeric value. @@ -954,7 +993,7 @@ format_float_short(double d, char format_code, /* shouldn't get here: Gay's code should always return something starting with a digit, an 'I', or 'N' */ strncpy(p, "ERR", 3); - p += 3; + /* p += 3; */ assert(0); } goto exit; |
