diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2010-07-16 13:09:56 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2010-07-16 13:09:56 +0300 |
commit | bc70de7b3302d5a81515b901cae376b8b51d2004 (patch) | |
tree | d36d6743e65697f6923b79d0ea8f9f9bf4ef7398 /missing/strtod.c | |
parent | b9e4a1fd4c8c8753ab8a9887bab55f03efe1e3e2 (diff) | |
download | egawk-bc70de7b3302d5a81515b901cae376b8b51d2004.tar.gz egawk-bc70de7b3302d5a81515b901cae376b8b51d2004.tar.bz2 egawk-bc70de7b3302d5a81515b901cae376b8b51d2004.zip |
Move to gawk-3.1.0.
Diffstat (limited to 'missing/strtod.c')
-rw-r--r-- | missing/strtod.c | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/missing/strtod.c b/missing/strtod.c deleted file mode 100644 index 7e6cc0c4..00000000 --- a/missing/strtod.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * strtod.c - * - * Stupid version of System V strtod(3) library routine. - * Does no overflow/underflow checking. - * - * A real number is defined to be - * optional leading white space - * optional sign - * string of digits with optional decimal point - * optional 'e' or 'E' - * followed by optional sign or space - * followed by an integer - * - * if ptr is not NULL a pointer to the character terminating the - * scan is returned in *ptr. If no number formed, *ptr is set to str - * and 0 is returned. - * - * For speed, we don't do the conversion ourselves. Instead, we find - * the end of the number and then call atof() to do the dirty work. - * This bought us a 10% speedup on a sample program at uunet.uu.net. - */ - -#if 0 -#include <ctype.h> -#endif - -extern double atof(); - -double -strtod(s, ptr) -register char *s; -register char **ptr; -{ - double ret = 0.0; - char *start = s; - char *begin = NULL; - int success = 0; - - /* optional white space */ - while (isspace(*s)) - s++; - - /* optional sign */ - if (*s == '+' || *s == '-') { - s++; - if (*(s-1) == '-') - begin = s - 1; - else - begin = s; - } - - /* string of digits with optional decimal point */ - if (isdigit(*s) && ! begin) - begin = s; - - while (isdigit(*s)) { - s++; - success++; - } - - if (*s == '.') { - if (! begin) - begin = s; - s++; - while (isdigit(*s)) - s++; - success++; - } - - if (s == start || success == 0) /* nothing there */ - goto out; - - /* - * optional 'e' or 'E' - * followed by optional sign or space - * followed by an integer - */ - - if (*s == 'e' || *s == 'E') { - s++; - - /* XXX - atof probably doesn't allow spaces here */ - while (isspace(*s)) - s++; - - if (*s == '+' || *s == '-') - s++; - - while (isdigit(*s)) - s++; - } - - /* go for it */ - ret = atof(begin); - -out: - if (! success) - s = start; /* in case all we did was skip whitespace */ - - if (ptr) - *ptr = s; - - return ret; -} - -#ifdef TEST -int -main(argc, argv) -int argc; -char **argv; -{ - double d; - char *p; - - for (argc--, argv++; argc; argc--, argv++) { - d = strtod (*argv, & p); - printf ("%lf [%s]\n", d, p); - } - - return 0; -} -#endif |