Staging
v0.8.1
https://github.com/python/cpython
Revision 46ce27ab1e22ca98957e0900c6a2415b86578b2e authored by Gregory P. Smith on 18 March 2013, 23:58:50 UTC, committed by Gregory P. Smith on 18 March 2013, 23:58:50 UTC
specifically addresses a stack misalignment issue on x86 and issues on
some more recent platforms.
1 parent bebf75f
Raw File
Tip revision: 46ce27ab1e22ca98957e0900c6a2415b86578b2e authored by Gregory P. Smith on 18 March 2013, 23:58:50 UTC
Fixes issue #17192: Update the ctypes module's libffi to v3.0.13. This
Tip revision: 46ce27a
atof.c

/* Just in case you haven't got an atof() around...
   This one doesn't check for bad syntax or overflow,
   and is slow and inaccurate.
   But it's good enough for the occasional string literal... */

#include "pyconfig.h"

#include <ctype.h>

double atof(char *s)
{
    double a = 0.0;
    int e = 0;
    int c;
    while ((c = *s++) != '\0' && isdigit(c)) {
        a = a*10.0 + (c - '0');
    }
    if (c == '.') {
        while ((c = *s++) != '\0' && isdigit(c)) {
            a = a*10.0 + (c - '0');
            e = e-1;
        }
    }
    if (c == 'e' || c == 'E') {
        int sign = 1;
        int i = 0;
        c = *s++;
        if (c == '+')
            c = *s++;
        else if (c == '-') {
            c = *s++;
            sign = -1;
        }
        while (isdigit(c)) {
            i = i*10 + (c - '0');
            c = *s++;
        }
        e += i*sign;
    }
    while (e > 0) {
        a *= 10.0;
        e--;
    }
    while (e < 0) {
        a *= 0.1;
        e++;
    }
    return a;
}
back to top