From e99f53404625a16651beb66659896311dbc56006 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 15 Nov 1995 21:58:58 +0000 Subject: . --- lib/xstrtod.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 lib/xstrtod.c diff --git a/lib/xstrtod.c b/lib/xstrtod.c new file mode 100644 index 000000000..838c5c463 --- /dev/null +++ b/lib/xstrtod.c @@ -0,0 +1,48 @@ +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef STDC_HEADERS +#include +#else +double strtod (); +#endif + +#include +#include +#include +#include +#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; +} + -- cgit v1.2.3-70-g09d2