diff --git a/jv_alloc.c b/jv_alloc.c index 50ca7acf..9cd32a91 100644 --- a/jv_alloc.c +++ b/jv_alloc.c @@ -1,5 +1,6 @@ #include #include +#include #include "jv_alloc.h" struct nomem_handler { @@ -129,6 +130,30 @@ void* jv_mem_alloc_unguarded(size_t sz) { return malloc(sz); } +void* jv_mem_calloc(size_t nemb, size_t sz) { + void* p = calloc(nemb, sz); + if (!p) { + memory_exhausted(); + } + return p; +} + +void* jv_mem_calloc_unguarded(size_t nemb, size_t sz) { + return calloc(nemb, sz); +} + +char* jv_mem_strdup(const char *s) { + char *p = strdup(s); + if (!p) { + memory_exhausted(); + } + return p; +} + +char* jv_mem_strdup_unguarded(const char *s) { + return strdup(s); +} + void jv_mem_free(void* p) { free(p); } diff --git a/jv_alloc.h b/jv_alloc.h index 91190825..0e383794 100644 --- a/jv_alloc.h +++ b/jv_alloc.h @@ -17,6 +17,10 @@ static void jv_mem_invalidate(void* mem, size_t n) { void* jv_mem_alloc(size_t); void* jv_mem_alloc_unguarded(size_t); +void* jv_mem_calloc(size_t, size_t); +void* jv_mem_calloc_unguarded(size_t, size_t); +char* jv_mem_strdup(const char *); +char* jv_mem_strdup_unguarded(const char *); void jv_mem_free(void*); __attribute__((warn_unused_result)) void* jv_mem_realloc(void*, size_t);