diff options
author | Guillaume Cottenceau <gc@mandriva.com> | 2001-01-04 20:04:45 +0000 |
---|---|---|
committer | Guillaume Cottenceau <gc@mandriva.com> | 2001-01-04 20:04:45 +0000 |
commit | 02fec4701cee79f875c1d02b8b4aee09380dbcb8 (patch) | |
tree | f4f291aedbb2e60ee58351481858a8cd3ec80b6b /mdk-stage1/dietlibc/lib/strtod.c | |
parent | 9887fe04751edf39e8389f2c3ec3f020b5e1c17d (diff) | |
download | drakx-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar drakx-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar.gz drakx-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar.bz2 drakx-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar.xz drakx-02fec4701cee79f875c1d02b8b4aee09380dbcb8.zip |
integrate dietlibc/stdio per default for cdrom and disk only installs
Diffstat (limited to 'mdk-stage1/dietlibc/lib/strtod.c')
-rw-r--r-- | mdk-stage1/dietlibc/lib/strtod.c | 52 |
1 files changed, 52 insertions, 0 deletions
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 <string.h> + +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; +} |