[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
c-strtod: improve error checking
From: |
Bruno Haible |
Subject: |
c-strtod: improve error checking |
Date: |
Wed, 21 Jan 2009 12:16:38 +0100 |
User-agent: |
KMail/1.9.9 |
Hi Jim,
Here's a proposed patch to improve c_strtod's error checking:
1) It currently does not check against a NULL return from newlocale(),
which can happen for example if out of memory.
2) When strtod_l or strtod returns an error, c_strtod fails to preserve
errno as an error indicator.
OK to apply?
2009-01-21 Bruno Haible <address@hidden>
* lib/c-strtod.c: Include errno.h.
(C_STRTOD): Check against NULL return from newlocale. Preserve errno
value from STRTOD_L and STRTOD.
--- lib/c-strtod.c.orig 2009-01-21 12:15:31.000000000 +0100
+++ lib/c-strtod.c 2009-01-21 12:15:24.000000000 +0100
@@ -1,6 +1,6 @@
/* Convert string to double, using the C locale.
- Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2006, 2009 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,6 +21,7 @@
#include "c-strtod.h"
+#include <errno.h>
#include <locale.h>
#include <stdlib.h>
@@ -50,9 +51,18 @@
#ifdef LC_ALL_MASK
- locale_t c_locale = newlocale (LC_ALL_MASK, "C", 0);
+ locale_t c_locale;
+ int saved_errno;
+
+ c_locale = newlocale (LC_ALL_MASK, "C", (locale_t)0);
+ if (c_locale == (locale_t)0)
+ return 0; /* errno is set here */
+
r = STRTOD_L (nptr, endptr, c_locale);
+
+ saved_errno = errno;
freelocale (c_locale);
+ errno = saved_errno;
#else
@@ -68,8 +78,11 @@
if (saved_locale)
{
+ int saved_errno = errno;
+
setlocale (LC_NUMERIC, saved_locale);
free (saved_locale);
+ errno = saved_errno;
}
#endif
- c-strtod: improve error checking,
Bruno Haible <=
- Re: c-strtod: improve error checking, Paolo Bonzini, 2009/01/21
- Re: c-strtod: improve error checking, Jim Meyering, 2009/01/21
- Re: c-strtod: improve error checking, Bruno Haible, 2009/01/21
- Re: c-strtod: improve error checking, Karl Berry, 2009/01/21
- Re: c-strtod: improve error checking, Peter Seebach, 2009/01/21
- Re: c-strtod: improve error checking, Simon Josefsson, 2009/01/21
- Re: NULL macro, Bruno Haible, 2009/01/21
- Re: NULL macro, Simon Josefsson, 2009/01/21