diff --git a/libpkgconf/bsdstubs.c b/libpkgconf/bsdstubs.c index 2c000ac..67bc787 100644 --- a/libpkgconf/bsdstubs.c +++ b/libpkgconf/bsdstubs.c @@ -137,3 +137,23 @@ pkgconf_strndup(const char *src, size_t len) { return strndup(src, len); } + +#ifndef HAVE_REALLOCARRAY +void * +reallocarray(void *ptr, size_t m, size_t n) +{ + if (n && m > -1 / n) + { + errno = ENOMEM; + return 0; + } + + return realloc(ptr, m * n); +} +#endif + +void * +pkgconf_reallocarray(void *ptr, size_t m, size_t n) +{ + return reallocarray(ptr, m, n); +} diff --git a/libpkgconf/bsdstubs.h b/libpkgconf/bsdstubs.h index a6b3162..4e52d41 100644 --- a/libpkgconf/bsdstubs.h +++ b/libpkgconf/bsdstubs.h @@ -25,6 +25,7 @@ extern "C" { PKGCONF_API extern size_t pkgconf_strlcpy(char *dst, const char *src, size_t siz); PKGCONF_API extern size_t pkgconf_strlcat(char *dst, const char *src, size_t siz); PKGCONF_API extern char *pkgconf_strndup(const char *src, size_t len); +PKGCONF_API extern void *pkgconf_reallocarray(void *ptr, size_t m, size_t n); #ifdef __cplusplus }