From b0cc20c2269022fd9907014686ac682dff0e5978 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 9 Aug 2004 18:31:09 +0000 Subject: [PATCH] Remove dependency of xalloc in exitfail, error, gettext. --- ChangeLog | 5 ++++- lib/ChangeLog | 13 +++++++++++-- lib/userspec.c | 21 +++------------------ lib/xalloc-die.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ lib/xalloc.h | 16 +++------------- lib/xmalloc.c | 28 +--------------------------- modules/xalloc | 5 +---- modules/xalloc-die | 23 +++++++++++++++++++++++ 8 files changed, 91 insertions(+), 65 deletions(-) create mode 100644 lib/xalloc-die.c create mode 100644 modules/xalloc-die diff --git a/ChangeLog b/ChangeLog index 755ce16695..4e240bc0cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2004-08-09 Paul Eggert + * 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 * modules/progname (Depends-on): Don't depend on stdbool. diff --git a/lib/ChangeLog b/lib/ChangeLog index f4b2d09715..ce598ecbef 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,4 +1,13 @@ -2004-08-09 Paul Eggert +2004-08-08 Paul Eggert + + * 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 . Include rather than . - + 2004-08-08 Bruno Haible * pathname.h (FILE_SYSTEM_PREFIX_LEN): Renamed from diff --git a/lib/userspec.c b/lib/userspec.c index 820c710279..6bf40895d9 100644 --- a/lib/userspec.c +++ b/lib/userspec.c @@ -277,25 +277,10 @@ parse_user_spec (const char *spec_arg, uid_t *uid, gid_t *gid, 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) diff --git a/lib/xalloc-die.c b/lib/xalloc-die.c new file mode 100644 index 0000000000..ca3a689fa5 --- /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 +#endif + +#include "xalloc.h" + +#include + +#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 (); +} diff --git a/lib/xalloc.h b/lib/xalloc.h index 5985892c91..d81f2a6764 100644 --- a/lib/xalloc.h +++ b/lib/xalloc.h @@ -38,19 +38,9 @@ extern "C" { # 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; diff --git a/lib/xmalloc.c b/lib/xmalloc.c index cc7501974d..9b7a948c2f 100644 --- 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 #include -#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. */ diff --git a/modules/xalloc b/modules/xalloc index 5d93aa3988..e8370970df 100644 --- 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 @@ lib/xstrdup.c m4/xalloc.m4 Depends-on: -error -gettext -exitfail configure.ac: gl_XALLOC diff --git a/modules/xalloc-die b/modules/xalloc-die new file mode 100644 index 0000000000..2c0df449a9 --- /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 + -- 2.30.2