projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix autoreconf invocation.
[gnulib.git]
/
lib
/
xstrtod.c
diff --git
a/lib/xstrtod.c
b/lib/xstrtod.c
index
1e55cd1
..
06360dd
100644
(file)
--- a/
lib/xstrtod.c
+++ b/
lib/xstrtod.c
@@
-1,5
+1,6
@@
-/* 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, 2004 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
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
@@
-13,7
+14,7
@@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
- Inc., 5
9 Temple Place - Suite 330, Boston, MA 02111-1307
, USA. */
+ Inc., 5
1 Franklin Street, Fifth Floor, Boston, MA 02110-1301
, USA. */
/* Written by Jim Meyering. */
/* Written by Jim Meyering. */
@@
-21,51
+22,48
@@
# include <config.h>
#endif
# include <config.h>
#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-#else
-double strtod ();
-#endif
+#include "xstrtod.h"
#include <errno.h>
#include <errno.h>
-#include <stdio.h>
#include <limits.h>
#include <limits.h>
-#include "xstrtod.h"
+#include <stdio.h>
+
+/* 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
/* 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. */
+ conversion put the result in *RESULT and return true. Return
+ false 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;
+bool
+xstrtod (char const *str, char const **ptr, double *result,
+ double (*convert) (char const *, char **))
{
double val;
char *terminator;
{
double val;
char *terminator;
-
int fail
;
+
bool ok = true
;
- fail = 0;
errno = 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'))
/* Having a non-zero terminator is an error only when PTR is NULL. */
if (terminator == str || (ptr == NULL && *terminator != '\0'))
-
fail = 1
;
+
ok = false
;
else
{
/* Allow underflow (in which case strtod returns zero),
but flag overflow as an error. */
if (val != 0.0 && errno == ERANGE)
else
{
/* Allow underflow (in which case strtod returns zero),
but flag overflow as an error. */
if (val != 0.0 && errno == ERANGE)
-
fail = 1
;
+
ok = false
;
}
if (ptr != NULL)
*ptr = terminator;
*result = val;
}
if (ptr != NULL)
*ptr = terminator;
*result = val;
- return
fail
;
+ return
ok
;
}
}
-