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;
+}