Module Name:    src
Committed By:   christos
Date:           Sat Oct  7 19:38:35 UTC 2017

Modified Files:
        src/lib/libc/stdlib: reallocarray.c

Log Message:
add recallocarray


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/lib/libc/stdlib/reallocarray.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/stdlib/reallocarray.c
diff -u src/lib/libc/stdlib/reallocarray.c:1.7 src/lib/libc/stdlib/reallocarray.c:1.8
--- src/lib/libc/stdlib/reallocarray.c:1.7	Wed Apr  6 07:07:58 2016
+++ src/lib/libc/stdlib/reallocarray.c	Sat Oct  7 15:38:35 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: reallocarray.c,v 1.7 2016/04/06 11:07:58 roy Exp $	*/
+/*	$NetBSD: reallocarray.c,v 1.8 2017/10/07 19:38:35 christos Exp $	*/
 /*	$OpenBSD: reallocarray.c,v 1.1 2014/05/08 21:43:49 deraadt Exp $	*/
 
 /*-
@@ -31,10 +31,11 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: reallocarray.c,v 1.7 2016/04/06 11:07:58 roy Exp $");
+__RCSID("$NetBSD: reallocarray.c,v 1.8 2017/10/07 19:38:35 christos Exp $");
 
 #define _OPENBSD_SOURCE
 #include <errno.h>
+#include <string.h>
 #include <stdlib.h>
 
 void *
@@ -51,3 +52,15 @@ reallocarray(void *optr, size_t nmemb, s
 	errno = e;
 	return NULL;
 }
+
+void *
+recallocarray(void *optr, size_t omemb, size_t nmemb, size_t size)
+{
+	char *nptr = reallocarray(optr, nmemb, size);
+
+	if (nptr == NULL || omemb >= nmemb)
+		return nptr;
+
+	memset(nptr + omemb * size, 0, (nmemb - omemb) * size);
+	return nptr;
+}

Reply via email to