diff options
author | nate <nate@FreeBSD.org> | 1996-02-12 06:39:49 +0000 |
---|---|---|
committer | nate <nate@FreeBSD.org> | 1996-02-12 06:39:49 +0000 |
commit | a541000ba091bdab04b610bf2ad4f8a20c4a910e (patch) | |
tree | 1caff7110bb1e55436543bca0ce06022550e79fb /gnu/usr.bin/sort/xstrtod.c | |
parent | c0ae8aaae29c16a516aabe7b88b3b7f97779077d (diff) | |
parent | 4778ca641d25e08c667c809693e9d1d8a79098e3 (diff) | |
download | FreeBSD-src-a541000ba091bdab04b610bf2ad4f8a20c4a910e.zip FreeBSD-src-a541000ba091bdab04b610bf2ad4f8a20c4a910e.tar.gz |
This commit was generated by cvs2svn to compensate for changes in r14049,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'gnu/usr.bin/sort/xstrtod.c')
-rw-r--r-- | gnu/usr.bin/sort/xstrtod.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/gnu/usr.bin/sort/xstrtod.c b/gnu/usr.bin/sort/xstrtod.c new file mode 100644 index 0000000..838c5c4 --- /dev/null +++ b/gnu/usr.bin/sort/xstrtod.c @@ -0,0 +1,48 @@ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#ifdef STDC_HEADERS +#include <stdlib.h> +#else +double strtod (); +#endif + +#include <errno.h> +#include <stdio.h> +#include <limits.h> +#include <ctype.h> +#include "xstrtod.h" + +int +xstrtod (str, ptr, result) + const char *str; + const char **ptr; + double *result; +{ + double val; + char *terminator; + int fail; + + fail = 0; + errno = 0; + val = strtod (str, &terminator); + + /* Having a non-zero terminator is an error only when PTR is NULL. */ + if (terminator == str || (ptr == NULL && *terminator != '\0')) + fail = 1; + else + { + /* Allow underflow (in which case strtod returns zero), + but flag overflow as an error. */ + if (val != 0.0 && errno == ERANGE) + fail = 1; + } + + if (ptr != NULL) + *ptr = terminator; + + *result = val; + return fail; +} + |