Issue #7701: Fix crash in binascii.b2a_uu() in debug mode when given a
[python.git] / Python / atof.c
blob8fbde38472832e005860fc66bc945c4b38c61d75
2 /* Just in case you haven't got an atof() around...
3 This one doesn't check for bad syntax or overflow,
4 and is slow and inaccurate.
5 But it's good enough for the occasional string literal... */
7 #include "pyconfig.h"
9 #include <ctype.h>
11 double atof(char *s)
13 double a = 0.0;
14 int e = 0;
15 int c;
16 while ((c = *s++) != '\0' && isdigit(c)) {
17 a = a*10.0 + (c - '0');
19 if (c == '.') {
20 while ((c = *s++) != '\0' && isdigit(c)) {
21 a = a*10.0 + (c - '0');
22 e = e-1;
25 if (c == 'e' || c == 'E') {
26 int sign = 1;
27 int i = 0;
28 c = *s++;
29 if (c == '+')
30 c = *s++;
31 else if (c == '-') {
32 c = *s++;
33 sign = -1;
35 while (isdigit(c)) {
36 i = i*10 + (c - '0');
37 c = *s++;
39 e += i*sign;
41 while (e > 0) {
42 a *= 10.0;
43 e--;
45 while (e < 0) {
46 a *= 0.1;
47 e++;
49 return a;