Mercurial > hg > octave-lyh > gnulib-hg
changeset 4818:167a92276385
New function xalloc_oversized.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Mon, 27 Oct 2003 08:00:26 +0000 |
parents | 7c67f04e1c19 |
children | 9449e9d024f2 |
files | lib/ChangeLog lib/xalloc.h lib/xmalloc.c |
diffstat | 3 files changed, 37 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,26 @@ +2003-10-26 Paul Eggert <eggert@twinsun.com> + + * xalloc.h (xalloc_oversized): New static inline function, for + callers that want to do their own size-overflow checking. Include + <stdbool.h>, since xalloc_oversized returns bool. + + Add two functions x2realloc, x2nrealloc, for programs that grow + arrays dynamically by doubling their sizes. + * xalloc.h (x2realloc, x2nrealloc): New decls. + * xmalloc.c (x2nrealloc_inline, x2nrealloc, x2realloc): + New functions. + + Port to C99 semantics for 'inline' of external functions. + Bug reported by Bruno Haible. + * xmalloc.c (xnmalloc_inline): New static inline function, + with the old contents of xnmalloc. + (xnmalloc, xmalloc): Use it. + (xnrealloc_inline): New static inline function, + with the old contents of xnrealloc. + (xnrealloc, xrealloc): Use it. + + * alloc.c (alloca): xmalloc cannot return NULL, so don't test for that. + 2003-10-25 Paul Eggert <eggert@twinsun.com> Fix several address-calculation bugs in the hash modules,
--- a/lib/xalloc.h +++ b/lib/xalloc.h @@ -20,6 +20,7 @@ #ifndef XALLOC_H_ # define XALLOC_H_ +# include <stdbool.h> # include <stddef.h> # ifndef __attribute__ @@ -59,6 +60,16 @@ void *xclone (void const *p, size_t s); char *xstrdup (const char *str); +/* Return true if an array of N objects, each of size S, cannot exist + due to size arithmetic overflow. S must be nonzero. */ + +static inline bool +xalloc_oversized (size_t n, size_t s) +{ + size_t size_max = -1; + return size_max / s < n; +} + /* These macros are deprecated; they will go away soon, and are retained temporarily only to ease conversion to the functions described above. */ # define CCLONE(p, n) xclone (p, (n) * sizeof *(p))
--- a/lib/xmalloc.c +++ b/lib/xmalloc.c @@ -23,7 +23,6 @@ #include "xalloc.h" -#include <stdbool.h> #include <stdlib.h> #include <string.h> @@ -49,15 +48,6 @@ /* If non NULL, call this function when memory is exhausted. */ void (*xalloc_fail_func) (void) = 0; -/* Return true if array of N objects, each of size S, cannot exist due - to arithmetic overflow. S must be nonzero. */ - -static inline bool -array_size_overflow (size_t n, size_t s) -{ - return SIZE_MAX / s < n; -} - /* 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"); @@ -81,7 +71,7 @@ xnmalloc_inline (size_t n, size_t s) { void *p; - if (array_size_overflow (n, s) || ! (p = malloc (n * s))) + if (xalloc_oversized (n, s) || ! (p = malloc (n * s))) xalloc_die (); return p; } @@ -106,7 +96,7 @@ static inline void * xnrealloc_inline (void *p, size_t n, size_t s) { - if (array_size_overflow (n, s) || ! (p = realloc (p, n * s))) + if (xalloc_oversized (n, s) || ! (p = realloc (p, n * s))) xalloc_die (); return p; } @@ -249,7 +239,7 @@ void *p; /* Test for overflow, since some calloc implementations don't have proper overflow checks. */ - if (array_size_overflow (n, s) || ! (p = calloc (n, s))) + if (xalloc_oversized (n, s) || ! (p = calloc (n, s))) xalloc_die (); return p; }