From b317db660476338639fd49b79dd5917606e263d1 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 20 Jan 2004 14:07:25 +0000 Subject: [PATCH] New module 'xallocsa'. --- ChangeLog | 5 +++++ MODULES.html.sh | 1 + lib/ChangeLog | 5 +++++ lib/xallocsa.c | 37 +++++++++++++++++++++++++++++++++++++ lib/xallocsa.h | 42 ++++++++++++++++++++++++++++++++++++++++++ modules/xallocsa | 21 +++++++++++++++++++++ 6 files changed, 111 insertions(+) create mode 100644 lib/xallocsa.c create mode 100644 lib/xallocsa.h create mode 100644 modules/xallocsa diff --git a/ChangeLog b/ChangeLog index 15f21c3674..7e9e9a7c5b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2004-01-20 Bruno Haible + + * modules/xallocsa: New file. + * MODULES.html.sh (func_all_modules): Add xallocsa. + 2004-01-20 Bruno Haible * modules/allocsa: New file. diff --git a/MODULES.html.sh b/MODULES.html.sh index 738a38d790..0821cb4cce 100755 --- a/MODULES.html.sh +++ b/MODULES.html.sh @@ -1461,6 +1461,7 @@ func_all_modules () func_module xalloc func_module alloca func_module allocsa + func_module xallocsa func_end_table element="Integer arithmetic functions " diff --git a/lib/ChangeLog b/lib/ChangeLog index 1d69735367..4eb66fc403 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,8 @@ +2003-11-24 Bruno Haible + + * xallocsa.h: New file, from GNU gettext. + * xallocsa.c: New file, from GNU gettext. + 2003-11-24 Bruno Haible * allocsa.h: New file, from GNU gettext. diff --git a/lib/xallocsa.c b/lib/xallocsa.c new file mode 100644 index 0000000000..2c7286a738 --- /dev/null +++ b/lib/xallocsa.c @@ -0,0 +1,37 @@ +/* Safe automatic memory allocation with out of memory checking. + Copyright (C) 2003 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + 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. */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +/* Specification. */ +#include "xallocsa.h" + +#include "xalloc.h" + +void * +xmallocsa (size_t n) +{ + void *p; + + p = mallocsa (n); + if (p == NULL) + xalloc_die (); + return p; +} diff --git a/lib/xallocsa.h b/lib/xallocsa.h new file mode 100644 index 0000000000..9b11142753 --- /dev/null +++ b/lib/xallocsa.h @@ -0,0 +1,42 @@ +/* Safe automatic memory allocation with out of memory checking. + Copyright (C) 2003 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + 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. */ + +#ifndef _XALLOCSA_H +#define _XALLOCSA_H + +#include "allocsa.h" + +/* xallocsa(N) is a checking safe variant of alloca(N). It allocates N bytes + of memory allocated on the stack, that must be freed using freesa() before + the function returns. Upon failure, it exits with an error message. */ +#if HAVE_ALLOCA +# define xallocsa(N) \ + ((N) < 4032 - sa_increment \ + ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \ + : xmallocsa (N)) +extern void * xmallocsa (size_t n); +#else +# define xallocsa(N) \ + xmalloc (N) +#endif + +/* Maybe we should also define a variant + xnallocsa (size_t n, size_t s) - behaves like xallocsa (n * s) + If this would be useful in your application. please speak up. */ + +#endif /* _XALLOCSA_H */ diff --git a/modules/xallocsa b/modules/xallocsa new file mode 100644 index 0000000000..98a0b4cdac --- /dev/null +++ b/modules/xallocsa @@ -0,0 +1,21 @@ +Description: +Safe automatic memory allocation with out of memory checking. + +Files: +lib/xallocsa.h +lib/xallocsa.c + +Depends-on: +allocsa +xalloc + +configure.ac: + +Makefile.am: +lib_SOURCES += xallocsa.h xallocsa.c + +Include: +#include "xallocsa.h" + +Maintainer: +Bruno Haible -- 2.30.2