From 02fec4701cee79f875c1d02b8b4aee09380dbcb8 Mon Sep 17 00:00:00 2001 From: Guillaume Cottenceau Date: Thu, 4 Jan 2001 20:04:45 +0000 Subject: integrate dietlibc/stdio per default for cdrom and disk only installs --- mdk-stage1/dietlibc/lib/strtod.c | 52 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 mdk-stage1/dietlibc/lib/strtod.c (limited to 'mdk-stage1/dietlibc/lib/strtod.c') diff --git a/mdk-stage1/dietlibc/lib/strtod.c b/mdk-stage1/dietlibc/lib/strtod.c new file mode 100644 index 000000000..767be679f --- /dev/null +++ b/mdk-stage1/dietlibc/lib/strtod.c @@ -0,0 +1,52 @@ +#include + +extern char isspace(char c); + +#ifdef __GNUC__ +static inline char isdigit(char c) { return (c>='0' && c<='9'); } +#endif + +double strtod(const char *nptr, char **endptr) { + double d=0; + register const char *c=nptr; + char neg=0; + while (*c && isspace(*c)) ++c; + switch (*c) { + case '-': neg=1; + case '+': c++; break; + default: break; + } + while (isdigit(*c)) { + d=d*10+(*c-'0'); + ++c; + } + if (*c=='.') { + double factor=.1; + while (isdigit(*++c)) { + d=d+(factor*(*c-'0')); + factor/=10; + } + } + if ((*c|32)=='e') { + int exp=0; + char neg=0; + if (c[1]<'0') { + switch (*c) { + case '-': neg=1; + case '+': c++; break; + default: + d=0; + c=nptr; + goto done; + } + } + while (isdigit(*++c)) + exp=exp*10+(*c-'0'); + while (exp) { /* XXX: this introduces rounding errors */ + d*=10; --exp; + } + } +done: + if (endptr) *endptr=(char*)c; + return d; +} -- cgit v1.2.1