summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/lib/strtod.c
diff options
context:
space:
mode:
authorGuillaume Cottenceau <gc@mandriva.com>2001-01-04 20:04:45 +0000
committerGuillaume Cottenceau <gc@mandriva.com>2001-01-04 20:04:45 +0000
commit02fec4701cee79f875c1d02b8b4aee09380dbcb8 (patch)
treef4f291aedbb2e60ee58351481858a8cd3ec80b6b /mdk-stage1/dietlibc/lib/strtod.c
parent9887fe04751edf39e8389f2c3ec3f020b5e1c17d (diff)
downloaddrakx-backup-do-not-use-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar
drakx-backup-do-not-use-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar.gz
drakx-backup-do-not-use-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar.bz2
drakx-backup-do-not-use-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar.xz
drakx-backup-do-not-use-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.c52
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;
+}