From: Oleksandr Natalenko Date: Mon, 2 Jan 2017 19:54:08 +0000 (+0100) Subject: utils: provide array allocation wrapper X-Git-Tag: v0.8~288 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=87efdaf0a7a804cda24749246b26772bbdcaef5e;p=thirdparty%2Fnftables.git utils: provide array allocation wrapper This will be used for allocating memory for arrays in heap instead of keeping them on stack. Signed-off-by: Oleksandr Natalenko Signed-off-by: Florian Westphal --- diff --git a/include/utils.h b/include/utils.h index bb58ba42..3199388a 100644 --- a/include/utils.h +++ b/include/utils.h @@ -138,6 +138,7 @@ extern void __memory_allocation_error(const char *filename, uint32_t line) __nor extern void xfree(const void *ptr); extern void *xmalloc(size_t size); +extern void *xmalloc_array(size_t nmemb, size_t size); extern void *xrealloc(void *ptr, size_t size); extern void *xzalloc(size_t size); extern char *xstrdup(const char *s); diff --git a/src/utils.c b/src/utils.c index 65dabf41..47f5b791 100644 --- a/src/utils.c +++ b/src/utils.c @@ -39,6 +39,17 @@ void *xmalloc(size_t size) return ptr; } +void *xmalloc_array(size_t nmemb, size_t size) +{ + assert(size != 0); + assert(nmemb != 0); + + if (nmemb > SIZE_MAX / size) + memory_allocation_error(); + + return xmalloc(nmemb * size); +} + void *xrealloc(void *ptr, size_t size) { ptr = realloc(ptr, size);