From 9481487e3d156ca18742c124735f1bc52ebfa616 Mon Sep 17 00:00:00 2001 From: David Given Date: Wed, 23 Nov 2016 22:16:25 +0100 Subject: [PATCH] Implement calloc() (accidentally got dropped with the malloc rewrite). --- lang/cem/libcc.ansi/malloc/calloc.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 lang/cem/libcc.ansi/malloc/calloc.c diff --git a/lang/cem/libcc.ansi/malloc/calloc.c b/lang/cem/libcc.ansi/malloc/calloc.c new file mode 100644 index 000000000..2e9d3be16 --- /dev/null +++ b/lang/cem/libcc.ansi/malloc/calloc.c @@ -0,0 +1,23 @@ +#include +#include +#include + +void* calloc(size_t nmemb, size_t size) +{ + size_t bytes = nmemb * size; + void* ptr; + + /* Test for overflow. + * See http://stackoverflow.com/questions/1815367/multiplication-of-large-numbers-how-to-catch-overflow + */ + + if ((nmemb == 0) || (size == 0) || (nmemb > (SIZE_MAX / size))) + return NULL; + + ptr = malloc(bytes); + if (!ptr) + return NULL; + + memset(ptr, 0, bytes); + return ptr; +} -- 2.34.1