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