diff options
| author | christos <christos@NetBSD.org> | 2017-10-07 19:38:35 +0000 |
|---|---|---|
| committer | christos <christos@NetBSD.org> | 2017-10-07 19:38:35 +0000 |
| commit | f3eb942a7596a9357af8f0d224e665b6a1c1e980 (patch) | |
| tree | ba542f0340b6ceac9c8f625dbf4ff8263e58716e /lib/libc/stdlib/reallocarray.c | |
| parent | 949e9c6e20eb75aecd1b6c7fce0220052007ff51 (diff) | |
add recallocarray
Diffstat (limited to 'lib/libc/stdlib/reallocarray.c')
| -rw-r--r-- | lib/libc/stdlib/reallocarray.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/lib/libc/stdlib/reallocarray.c b/lib/libc/stdlib/reallocarray.c index 8eba1cea116..98774156684 100644 --- a/lib/libc/stdlib/reallocarray.c +++ b/lib/libc/stdlib/reallocarray.c @@ -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, size_t size) 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; +} |
