X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fxstrtod.c;h=1a0b4d46038df6cfbdb595af1644e0a333724858;hb=11a85c350e8b872d617843487e1c77ea157880be;hp=1e55cd1520406ded7e685dbfc309bf410c53b7d7;hpb=783c1624bd8b027a65b3fba57d3213ccb1a6ddbd;p=gnulib.git diff --git a/lib/xstrtod.c b/lib/xstrtod.c index 1e55cd152..1a0b4d460 100644 --- a/lib/xstrtod.c +++ b/lib/xstrtod.c @@ -1,5 +1,5 @@ -/* xstrtod.c - error-checking interface to strtod - Copyright (C) 1996 Free Software Foundation, Inc. +/* error-checking interface to strtod-like functions + Copyright (C) 1996, 1999, 2000, 2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,27 +21,26 @@ # include #endif -#ifdef STDC_HEADERS -# include -#else -double strtod (); -#endif +#include "xstrtod.h" #include -#include #include -#include "xstrtod.h" +#include + +/* Tell the compiler that non-default rounding modes are used. */ +#if 199901 <= __STDC_VERSION__ + #pragma STDC FENV_ACCESS ON +#endif /* An interface to strtod that encapsulates all the error checking one should usually perform. Like strtod, but upon successful conversion put the result in *RESULT and return zero. Return - non-zero and don't modify *RESULT upon any failure. */ + non-zero and don't modify *RESULT upon any failure. CONVERT + specifies the conversion function, e.g., strtod itself. */ int -xstrtod (str, ptr, result) - const char *str; - const char **ptr; - double *result; +xstrtod (char const *str, char const **ptr, double *result, + double (*convert) (char const *, char **)) { double val; char *terminator; @@ -49,7 +48,7 @@ xstrtod (str, ptr, result) fail = 0; errno = 0; - val = strtod (str, &terminator); + val = convert (str, &terminator); /* Having a non-zero terminator is an error only when PTR is NULL. */ if (terminator == str || (ptr == NULL && *terminator != '\0')) @@ -68,4 +67,3 @@ xstrtod (str, ptr, result) *result = val; return fail; } -