changeset 5166:95d4226b62d3

Remove dependency of xalloc in exitfail, error, gettext.
author Paul Eggert <eggert@cs.ucla.edu>
date Mon, 09 Aug 2004 18:31:09 +0000
parents 9d7fe6ace357
children 0b2a1a38af66
files ChangeLog lib/ChangeLog lib/userspec.c lib/xalloc-die.c lib/xalloc.h lib/xmalloc.c modules/xalloc modules/xalloc-die
diffstat 8 files changed, 91 insertions(+), 65 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2004-08-09  Paul Eggert  <eggert@cs.ucla.edu>
 
+	* modules/xalloc-die: New file.
+	* modules/xalloc: Remove dependencies on error, gettext, exitfail.
+
 	* modules/md5 (Files): Add m4/uint32_t.m4.
 	* modules/sha1: Renamed from modules/sha.
 	(Files):
@@ -23,7 +26,7 @@
 	* modules/canonicalize, modules/euidaccess,
 	modules/filemode, modules/lchown, modules/makepath,
 	modules/rmdir, modules/stat: Likewise.
-	
+
 2004-08-03  Simon Josefsson  <jas@extundo.com>
 
 	* modules/progname (Depends-on): Don't depend on stdbool.
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,4 +1,13 @@
-2004-08-09  Paul Eggert  <eggert@cs.ucla.edu>
+2004-08-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* xalloc-die.c: New files.
+	* xalloc.h (xalloc_fail_func, xalloc_msg_memory_exhausted): Remove.
+	All uses removed.
+	* xmalloc.c (xalloc_fail_func, xalloc_msg_memory_exhausted): Likewise.
+	Move inclusions of gettext.h, error.h, exitfail.h to xalloc-die.c.
+	(_, N_, xalloc_die): Move to xalloc-die.c.
+	* userspec.c (parse_user_spaec): Use xstrdup rather than strdup,
+	so that we needn't mess with xalloc_msg_memory_exhausted.
 
 	* sha1.h: Renamed from sha.h.
 	(SHA1_H): Renamed from _SHA_H.
@@ -13,7 +22,7 @@
 	* sha1.c: Likewise; renamed from sha.c.
 	Do not include <sys/types.h>.
 	Include <stddef.h> rather than <stdlib.h>.
-	
+
 2004-08-08  Bruno Haible  <bruno@clisp.org>
 
 	* pathname.h (FILE_SYSTEM_PREFIX_LEN): Renamed from
--- a/lib/userspec.c
+++ b/lib/userspec.c
@@ -277,25 +277,10 @@
   if (error_msg == NULL)
     {
       if (u != NULL)
-	{
-	  *username_arg = strdup (u);
-	  if (*username_arg == NULL)
-	    error_msg = xalloc_msg_memory_exhausted;
-	}
+	*username_arg = xstrdup (u);
 
-      if (groupname != NULL && error_msg == NULL)
-	{
-	  *groupname_arg = strdup (groupname);
-	  if (*groupname_arg == NULL)
-	    {
-	      if (*username_arg != NULL)
-		{
-		  free (*username_arg);
-		  *username_arg = NULL;
-		}
-	      error_msg = xalloc_msg_memory_exhausted;
-	    }
-	}
+      if (groupname != NULL)
+	*groupname_arg = xstrdup (groupname);
     }
 
   if (error_msg && dot)
new file mode 100644
--- /dev/null
+++ b/lib/xalloc-die.c
@@ -0,0 +1,45 @@
+/* Report a memory allocation failure and exit.
+
+   Copyright (C) 1997, 1998, 1999, 2000, 2002, 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
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "xalloc.h"
+
+#include <stdlib.h>
+
+#include "error.h"
+#include "exitfail.h"
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+
+void
+xalloc_die (void)
+{
+  error (exit_failure, 0, "%s", _("memory exhausted"));
+
+  /* The `noreturn' cannot be given to error, since it may return if
+     its first argument is 0.  To help compilers understand the
+     xalloc_die does not return, call abort.  Also, the abort is a
+     safety feature if exit_failure is 0 (which shouldn't happen).  */
+  abort ();
+}
--- a/lib/xalloc.h
+++ b/lib/xalloc.h
@@ -38,19 +38,9 @@
 #  define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
 # endif
 
-
-/* If this pointer is non-zero, run the specified function upon each
-   allocation failure.  It is initialized to zero. */
-extern void (*xalloc_fail_func) (void);
-
-/* If XALLOC_FAIL_FUNC is undefined or a function that returns, this
-   message is output.  It is translated via gettext.
-   Its value is "memory exhausted".  */
-extern char const xalloc_msg_memory_exhausted[];
-
-/* This function is always triggered when memory is exhausted.  It is
-   in charge of honoring the two previous items.  It exits with status
-   exit_failure (defined in exitfail.h).  This is the
+/* This function is always triggered when memory is exhausted.
+   It must be defined by the application, either explicitly
+   or by using gnulib's xalloc-die module.  This is the
    function to call when one wants the program to die because of a
    memory allocation failure.  */
 extern void xalloc_die (void) ATTRIBUTE_NORETURN;
--- a/lib/xmalloc.c
+++ b/lib/xmalloc.c
@@ -1,6 +1,6 @@
 /* xmalloc.c -- malloc with out of memory checking
 
-   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2003,
+   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
    1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
@@ -26,36 +26,10 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-#define N_(msgid) msgid
-
-#include "error.h"
-#include "exitfail.h"
-
 #ifndef SIZE_MAX
 # define SIZE_MAX ((size_t) -1)
 #endif
 
-/* If non NULL, call this function when memory is exhausted. */
-void (*xalloc_fail_func) (void) = 0;
-
-/* If XALLOC_FAIL_FUNC is NULL, or does return, display this message
-   before exiting when memory is exhausted.  Goes through gettext. */
-char const xalloc_msg_memory_exhausted[] = N_("memory exhausted");
-
-void
-xalloc_die (void)
-{
-  if (xalloc_fail_func)
-    (*xalloc_fail_func) ();
-  error (exit_failure, 0, "%s", _(xalloc_msg_memory_exhausted));
-  /* The `noreturn' cannot be given to error, since it may return if
-     its first argument is 0.  To help compilers understand the
-     xalloc_die does terminate, call abort.  */
-  abort ();
-}
-
 /* Allocate an array of N objects, each with S bytes of memory,
    dynamically, with error checking.  S must be nonzero.  */
 
--- a/modules/xalloc
+++ b/modules/xalloc
@@ -1,5 +1,5 @@
 Description:
-Memory allocation with out-of-memory checking.
+Memory allocation with out-of-memory checking.  Also see xalloc-die.
 
 Files:
 lib/xalloc.h
@@ -8,9 +8,6 @@
 m4/xalloc.m4
 
 Depends-on:
-error
-gettext
-exitfail
 
 configure.ac:
 gl_XALLOC
new file mode 100644
--- /dev/null
+++ b/modules/xalloc-die
@@ -0,0 +1,23 @@
+Description:
+Report a memory allocation failure and exit.
+
+Files:
+lib/xalloc-die.c
+
+Depends-on:
+xalloc
+error
+gettext
+exitfail
+
+configure.ac:
+
+Makefile.am:
+lib_SOURCES += xalloc-die.c
+
+Include:
+"xalloc.h"
+
+Maintainer:
+all
+