Change c_strtod, c_strtold to no longer call xalloc_die().
authorBruno Haible <bruno@clisp.org>
Fri, 23 Jan 2009 22:41:16 +0000 (23:41 +0100)
committerBruno Haible <bruno@clisp.org>
Fri, 23 Jan 2009 22:41:16 +0000 (23:41 +0100)
ChangeLog
NEWS
doc/c-strtod.texi
lib/c-strtod.c
modules/c-strtod
modules/c-strtold

index 66a6632..42c3aca 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2009-01-23  Bruno Haible  <bruno@clisp.org>
+
+       Make c-strtod, c-strtold usable in libraries.
+       * lib/c-strtod.c: Include string.h instead of xalloc.h.
+       (C_STRTOD): Call strdup instead of xstrdup.
+       * modules/c-strtod (Depends-on): Add strdup-posix, remove xalloc.
+       * modules/c-strtold (Depends-on): Likewise.
+       * doc/c-strtod.texi: Remove the sentence mentioning xalloc_die.
+       * NEWS: Mention the change.
+       Reported by Michael Gold <mgold@ncf.ca>.
+
 2009-01-23  Jim Meyering  <meyering@redhat.com>
 
        c-strtod: when ENDPTR is non-NULL, set *ENDPTR in new failure path
diff --git a/NEWS b/NEWS
index 650c416..bf48451 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,15 @@ User visible incompatible changes
 
 Date        Modules         Changes
 
+2009-01-22  c-strtod        This function no longer calls xalloc_die(). If
+            c-strtold       you want to exit the program in case of out-of-
+                            memory, the calling function needs to arrange
+                            for it, like this:
+                                errno = 0;
+                                val = c_strtod (...);
+                                if (val == 0 && errno == ENOMEM)
+                                  xalloc_die ();
+
 2009-01-17  relocatable-prog  In the Makefile.am or Makefile.in, you now also
                             need to set RELOCATABLE_STRIP = :.
 
index 486b6e0..9d22e93 100644 (file)
@@ -23,6 +23,5 @@ In particular, only a period @samp{.} is accepted as decimal point, even
 when the current locale's notion of decimal point is a comma @samp{,},
 and no characters outside the basic character set are accepted.
 
-This function aborts via @code{xalloc_die} if it cannot allocate memory.
-On platforms without @code{strtod_l}, it is not safe for use in
+On platforms without @code{strtod_l}, this function is not safe for use in
 multi-threaded applications since it calls @code{setlocale}.
index 77e5aaf..9723e0b 100644 (file)
@@ -24,8 +24,7 @@
 #include <errno.h>
 #include <locale.h>
 #include <stdlib.h>
-
-#include "xalloc.h"
+#include <string.h>
 
 #if LONG
 # define C_STRTOD c_strtold
@@ -74,7 +73,7 @@ C_STRTOD (char const *nptr, char **endptr)
   if (!locale)
     {
       if (endptr)
-        *endptr = nptr;
+       *endptr = nptr;
       return 0; /* errno is set here */
     }
 
@@ -86,7 +85,13 @@ C_STRTOD (char const *nptr, char **endptr)
 
   if (saved_locale)
     {
-      saved_locale = xstrdup (saved_locale);
+      saved_locale = strdup (saved_locale);
+      if (saved_locale == NULL)
+       {
+         if (endptr)
+           *endptr = nptr;
+         return 0; /* errno is set here */
+       }
       setlocale (LC_NUMERIC, "C");
     }
 
index f82a988..7212e09 100644 (file)
@@ -8,7 +8,7 @@ m4/c-strtod.m4
 
 Depends-on:
 extensions
-xalloc
+strdup-posix
 
 configure.ac:
 gl_C_STRTOD
index d9d5a18..95439b1 100644 (file)
@@ -9,7 +9,7 @@ m4/c-strtod.m4
 
 Depends-on:
 extensions
-xalloc
+strdup-posix
 
 configure.ac:
 gl_C_STRTOLD