Mercurial > gnulib
changeset 29250:50552c1fdfb5
New macro xnmalloca.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Mon, 31 Dec 2007 11:54:37 +0100 |
parents | 51ccc20c299e |
children | a8345a60b0a1 |
files | ChangeLog lib/xmalloca.h |
diffstat | 2 files changed, 19 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Mon Dec 31 11:53:40 2007 +0100 +++ b/ChangeLog Mon Dec 31 11:54:37 2007 +0100 @@ -1,3 +1,8 @@ +2007-12-30 Bruno Haible <bruno@clisp.org> + + * lib/xmalloca.h: Include xalloc.h. + (xnmalloca): New macro. + 2007-12-30 Bruno Haible <bruno@clisp.org> * lib/malloca.h (nmalloca): New macro.
--- a/lib/xmalloca.h Mon Dec 31 11:53:40 2007 +0100 +++ b/lib/xmalloca.h Mon Dec 31 11:54:37 2007 +0100 @@ -19,6 +19,7 @@ #define _XMALLOCA_H #include "malloca.h" +#include "xalloc.h" #ifdef __cplusplus @@ -40,9 +41,19 @@ xmalloc (N) #endif -/* Maybe we should also define a variant - xnmalloca (size_t n, size_t s) - behaves like xmalloca (n * s) - If this would be useful in your application. please speak up. */ +/* xnmalloca(N,S) is an overflow-safe variant of xmalloca (N * S). + It allocates an array of N objects, each with S bytes of memory, + on the stack. S must be positive and N must be nonnegative. + The array must be freed using freea() before the function returns. + Upon failure, it exits with an error message. */ +#if HAVE_ALLOCA +/* Rely on xmalloca (SIZE_MAX) calling xalloc_die (). */ +# define xnmalloca(n, s) \ + xmalloca (xalloc_oversized ((n), (s)) ? (size_t) (-1) : (n) * (s)) +#else +# define xnmalloca(n, s) \ + xnmalloc ((n), (s)) +#endif #ifdef __cplusplus