malloc can, as always, be emulated via realloc(NULL).
ok deraadt
-/* $OpenBSD: stdlib.h,v 1.57 2014/04/21 13:17:32 deraadt Exp $ */
+/* $OpenBSD: stdlib.h,v 1.58 2014/04/22 14:26:26 tedu Exp $ */
/* $NetBSD: stdlib.h,v 1.25 1995/12/27 21:19:08 jtc Exp $ */
/*-
ldiv_t ldiv(long, long);
void *malloc(size_t);
#if __BSD_VISIBLE
-void *mallocarray(size_t, size_t);
+void *reallocarray(void *, size_t, size_t);
#endif /* __BSD_VISIBLE */
void qsort(void *, size_t, size_t, int (*)(const void *, const void *));
int rand(void);
-# $OpenBSD: Makefile.inc,v 1.51 2014/04/21 13:21:57 deraadt Exp $
+# $OpenBSD: Makefile.inc,v 1.52 2014/04/22 14:26:26 tedu Exp $
# stdlib sources
.PATH: ${LIBCSRCDIR}/arch/${MACHINE_CPU}/stdlib ${LIBCSRCDIR}/stdlib
MLINKS+=labs.3 llabs.3
MLINKS+=lsearch.3 lfind.3
MLINKS+=malloc.3 free.3 malloc.3 realloc.3 malloc.3 calloc.3
-MLINKS+=malloc.3 mallocarray.3 malloc.3 cfree.3 malloc.3 malloc.conf.5
+MLINKS+=malloc.3 reallocarray.3 malloc.3 cfree.3 malloc.3 malloc.conf.5
MLINKS+=qsort.3 heapsort.3 qsort.3 mergesort.3
MLINKS+=radixsort.3 sradixsort.3
MLINKS+=rand.3 srand.3 rand.3 rand_r.3
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $OpenBSD: malloc.3,v 1.74 2014/04/21 13:17:32 deraadt Exp $
+.\" $OpenBSD: malloc.3,v 1.75 2014/04/22 14:26:26 tedu Exp $
.\"
-.Dd $Mdocdate: April 21 2014 $
+.Dd $Mdocdate: April 22 2014 $
.Dt MALLOC 3
.Os
.Sh NAME
.Nm malloc ,
.Nm calloc ,
-.Nm mallocarray ,
+.Nm reallocarray ,
.Nm realloc ,
.Nm free ,
.Nm cfree
.Ft void *
.Fn calloc "size_t nmemb" "size_t size"
.Ft void *
-.Fn mallocarray "size_t nmemb" "size_t size"
+.Fn reallocarray "void *ptr" "size_t nmemb" "size_t size"
.Ft void *
.Fn realloc "void *ptr" "size_t size"
.Ft void
.Pp
The multiplication may lead to an integer overflow, which can
be avoided using the extension
-.Fn mallocarray ,
+.Fn reallocarray ,
as follows:
.Bd -literal -offset indent
-if ((p = mallocarray(num, size)) == NULL)
+if ((p = reallocarray(NULL, num, size)) == NULL)
err(1, "malloc");
.Ed
.Pp
.Fa size .
The space is initialized to zero.
The use of
+.Fn reallocarray
+or
.Fn calloc
is strongly encouraged when allocating multiple sized objects
in order to avoid possible integer overflows.
.Pp
Note that this will cause code that is supposed to handle
out-of-memory conditions gracefully to abort instead.
-.It Cm Z
-.Dq Zero .
-Fill some junk into the area allocated (see
-.Cm J ) ,
-except for the exact length the user asked for, which is zeroed.
.It Cm <
.Dq Half the cache size .
Decrease the size of the free page cache by a factor of two.
A rewrite by Otto Moerbeek introducing a new central data structure and more
randomization appeared in
.Ox 4.4 .
-.Fn mallocarray
+.Fn reallocarray
appeared in
.Ox 5.6 .
-/* $OpenBSD: malloc.c,v 1.154 2014/04/21 13:17:32 deraadt Exp $ */
+/* $OpenBSD: malloc.c,v 1.155 2014/04/22 14:26:26 tedu Exp $ */
/*
* Copyright (c) 2008, 2010, 2011 Otto Moerbeek <otto@drijf.net>
* Copyright (c) 2012 Matthew Dempsky <matthew@openbsd.org>
}
void *
-mallocarray(size_t nmemb, size_t size)
+reallocarray(void *optr, size_t nmemb, size_t size)
{
if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) &&
nmemb > 0 && SIZE_MAX / nmemb < size) {
errno = ENOMEM;
return NULL;
}
- return malloc(size * nmemb);
+ return realloc(optr, size * nmemb);
}
static void *