summaryrefslogtreecommitdiff
path: root/libc/stdlib/strtod.c
diff options
context:
space:
mode:
Diffstat (limited to 'libc/stdlib/strtod.c')
-rw-r--r--libc/stdlib/strtod.c113
1 files changed, 50 insertions, 63 deletions
diff --git a/libc/stdlib/strtod.c b/libc/stdlib/strtod.c
index 0d3bb790a..de3aecbd3 100644
--- a/libc/stdlib/strtod.c
+++ b/libc/stdlib/strtod.c
@@ -20,77 +20,64 @@
#include <stdlib.h>
#include <ctype.h>
-float
-strtod(const char *nptr, char ** endptr)
+float strtod(const char *nptr, char **endptr)
{
- unsigned short negative;
- float number;
- float fp_part;
- int exponent;
- unsigned short exp_negative;
+ unsigned short negative;
+ float number;
+ float fp_part;
+ int exponent;
+ unsigned short exp_negative;
- /* advance beyond any leading whitespace */
- while (isspace(*nptr))
- nptr++;
+ /* advance beyond any leading whitespace */
+ while (isspace(*nptr))
+ nptr++;
- /* check for optional '+' or '-' */
- negative=0;
- if (*nptr=='-')
- {
- negative=1;
- nptr++;
- }
- else
- if (*nptr=='+')
- nptr++;
+ /* check for optional '+' or '-' */
+ negative = 0;
+ if (*nptr == '-') {
+ negative = 1;
+ nptr++;
+ } else if (*nptr == '+')
+ nptr++;
- number=0;
- while (isdigit(*nptr))
- {
- number=number*10+(*nptr-'0');
- nptr++;
- }
-
- if (*nptr=='.')
- {
- nptr++;
- fp_part=0;
- while (isdigit(*nptr))
- {
- fp_part=fp_part/10.0 + (*nptr-'0')/10.0;
- nptr++;
+ number = 0;
+ while (isdigit(*nptr)) {
+ number = number * 10 + (*nptr - '0');
+ nptr++;
}
- number+=fp_part;
- }
- if (*nptr=='e' || *nptr=='E')
- {
- nptr++;
- exp_negative=0;
- if (*nptr=='-')
- {
- exp_negative=1;
- nptr++;
+ if (*nptr == '.') {
+ nptr++;
+ fp_part = 0;
+ while (isdigit(*nptr)) {
+ fp_part = fp_part / 10.0 + (*nptr - '0') / 10.0;
+ nptr++;
+ }
+ number += fp_part;
}
- else
- if (*nptr=='+')
- nptr++;
- exponent=0;
- while (isdigit(*nptr))
- {
- exponent=exponent*10+(*nptr-'0');
- exponent++;
+ if (*nptr == 'e' || *nptr == 'E') {
+ nptr++;
+ exp_negative = 0;
+ if (*nptr == '-') {
+ exp_negative = 1;
+ nptr++;
+ } else if (*nptr == '+')
+ nptr++;
+
+ exponent = 0;
+ while (isdigit(*nptr)) {
+ exponent = exponent * 10 + (*nptr - '0');
+ exponent++;
+ }
}
- }
- while (exponent)
- {
- if (exp_negative)
- number/=10;
- else
- number*=10;
- exponent--;
- }
- return (negative ? -number:number);
+ while (exponent) {
+ if (exp_negative)
+ number /= 10;
+ else
+ number *= 10;
+ exponent--;
+ }
+ return (negative ? -number : number);
}