diff options
Diffstat (limited to 'src/system.c')
-rw-r--r-- | src/system.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/system.c b/src/system.c index e9ff3883..5141bf40 100644 --- a/src/system.c +++ b/src/system.c @@ -23,16 +23,37 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> void* -serd_bufalloc(size_t size) +serd_malloc_aligned(size_t size, size_t alignment) { #ifdef HAVE_POSIX_MEMALIGN void* ptr = NULL; - const int ret = posix_memalign(&ptr, SERD_PAGE_SIZE, size); + const int ret = posix_memalign(&ptr, alignment, size); return ret ? NULL : ptr; #else return malloc(size); #endif } +void* +serd_calloc_aligned(size_t size, size_t alignment) +{ +#ifdef HAVE_POSIX_MEMALIGN + void* ptr = serd_malloc_aligned(size, alignment); + if (ptr) { + memset(ptr, 0, size); + } + return ptr; +#else + (void)alignment; + return calloc(1, size); +#endif +} + +void* +serd_allocate_buffer(size_t size) +{ + return serd_malloc_aligned(size, SERD_PAGE_SIZE); +} |