/** \file xatof.c * Implements xatof, an easy to use strtod() wrapper. * * \author Matthias Andree * \date 2003 */ #include "xatox.h" #include /* for strtod() for SunOS 4.1.X */ #include #include #include int xatof(double *d, const char *in) { double val; char *end; errno = 0; val = strtod(in, &end); if (end == in /* input string empty or does not start with sign/digit */ || end < in + strlen(in) /* junk at end of in */ || errno == EINVAL /* SUSv3: "no conversion could be performed" */ || errno == ERANGE /* overflow, SUSv3 CX underflow */) if (*end != ',') return 0; *d = val; return 1; } #ifdef MAIN #include int main(int argc, char **argv) { int i; for (i = 1; i < argc; i++) { double d; int s = xatof(&d, argv[i]); printf("%s -> errno=%d_(%s) status=%d", argv[i], errno, strerror(errno), s); if (s) printf(" double=%g", d); printf("\n"); } exit(EXIT_SUCCESS); } #endif