change mallocarray to reallocarray. useful in a few more situations.
authortedu <tedu@openbsd.org>
Tue, 22 Apr 2014 14:26:26 +0000 (14:26 +0000)
committertedu <tedu@openbsd.org>
Tue, 22 Apr 2014 14:26:26 +0000 (14:26 +0000)
malloc can, as always, be emulated via realloc(NULL).
ok deraadt

include/stdlib.h
lib/libc/stdlib/Makefile.inc
lib/libc/stdlib/malloc.3
lib/libc/stdlib/malloc.c

index 93eddce..71bb9f4 100644 (file)
@@ -1,4 +1,4 @@
-/*     $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 $  */
 
 /*-
@@ -125,7 +125,7 @@ long         labs(long);
 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);
index c8dc01c..83b42c3 100644 (file)
@@ -1,4 +1,4 @@
-#      $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
@@ -44,7 +44,7 @@ MLINKS+=insque.3 remque.3
 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
index 2a636b8..2f99ea9 100644 (file)
 .\" 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
@@ -50,7 +50,7 @@
 .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
@@ -96,10 +96,10 @@ if ((p = malloc(num * size)) == NULL)
 .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
@@ -125,6 +125,8 @@ objects, each of whose size is
 .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.
@@ -309,11 +311,6 @@ malloc_options = "X";
 .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.
@@ -494,6 +491,6 @@ random.
 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 .
index b48dcb3..5790781 100644 (file)
@@ -1,4 +1,4 @@
-/*     $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>
@@ -1433,14 +1433,14 @@ calloc(size_t nmemb, size_t size)
 }
 
 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 *