changeset 11071:784aa6a7ca43

Improve error checking of c_strtod call.
author Bruno Haible <bruno@clisp.org>
date Wed, 21 Jan 2009 23:55:58 +0100
parents 42d47e0b9b24
children 2017a2abcff4
files ChangeLog lib/getloadavg.c
diffstat 2 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-01-21  Bruno Haible  <bruno@clisp.org>
+
+	* lib/getloadavg.c (getloadavg): Check c_strtod result against error
+	conditions other than overflow.
+
 2009-01-21  Bruno Haible  <bruno@clisp.org>
 
 	* lib/c-strtod.c: Include errno.h.
--- a/lib/getloadavg.c
+++ b/lib/getloadavg.c
@@ -1,8 +1,8 @@
 /* Get the system load averages.
 
    Copyright (C) 1985, 1986, 1987, 1988, 1989, 1991, 1992, 1993, 1994,
-   1995, 1997, 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2008 Free Software
-   Foundation, Inc.
+   1995, 1997, 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free
+   Software Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with gnulib.
    Bugs can be reported to bug-gnulib@gnu.org.
@@ -621,8 +621,11 @@
   for (elem = 0; elem < nelem; elem++)
     {
       char *endptr;
-      double d = c_strtod (ptr, &endptr);
-      if (ptr == endptr)
+      double d;
+
+      errno = 0;
+      d = c_strtod (ptr, &endptr);
+      if (ptr == endptr || (d == 0 && errno != 0))
 	{
 	  if (elem == 0)
 	    return -1;