md5, sha1, sha256, sha512: add gl_SET_CRYPTO_CHECK_DEFAULT
[gnulib.git] / lib / xmalloca.h
index 1aa862e..2f7567d 100644 (file)
@@ -1,11 +1,11 @@
 /* Safe automatic memory allocation with out of memory checking.
-   Copyright (C) 2003, 2005, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2005, 2007, 2009-2013 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2003.
 
-   This program is free software; you can redistribute it and/or modify
+   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.
+   the Free Software Foundation; either version 3 of the License, 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
    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _XMALLOCA_H
 #define _XMALLOCA_H
 
 #include "malloca.h"
+#include "xalloc.h"
 
 
 #ifdef __cplusplus
@@ -28,11 +28,11 @@ extern "C" {
 
 
 /* xmalloca(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
+   of memory allocated on the stack, that must be freed using freea() before
    the function returns.  Upon failure, it exits with an error message.  */
 #if HAVE_ALLOCA
 # define xmalloca(N) \
-  ((N) < 4032 - sa_increment                                       \
+  ((N) < 4032 - sa_increment                                        \
    ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \
    : xmmalloca (N))
 extern void * xmmalloca (size_t n);
@@ -41,9 +41,19 @@ extern void * xmmalloca (size_t n);
   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