diff --git a/mem/src/arena/mem_arena.c b/mem/src/arena/mem_arena.c index 729b0aa..411b71a 100644 --- a/mem/src/arena/mem_arena.c +++ b/mem/src/arena/mem_arena.c @@ -26,6 +26,10 @@ internal void base_arena_clear(BaseArena *arena); internal void base_arena_free(BaseArena *arena); internal bool base_arena_init(BaseArena *arena, u64 capacity) { + if (!arena || arena->buf) { + return false; + } + u64 alloc_size = sizeof(u8) * capacity; arena->buf = (u8 *)malloc(alloc_size); @@ -47,6 +51,10 @@ internal void *base_arena_alloc(BaseArena *arena, u64 size) { internal void *base_arena_alloc_aligned(BaseArena *arena, u64 size, u64 alignment) { + if (!arena) { + return NULL; + } + u8 *output = mem_util_align_forward((void *)(arena->offset), alignment); if (output + size >= arena->buf + arena->capacity) { return NULL; @@ -58,11 +66,19 @@ internal void *base_arena_alloc_aligned(BaseArena *arena, u64 size, } internal void base_arena_clear(BaseArena *arena) { + if (!arena) { + return; + } + memset(arena->buf, 0, arena->offset - arena->buf); arena->offset = arena->buf; } internal void base_arena_free(BaseArena *arena) { + if (!arena) { + return; + } + if (arena->buf) { free(arena->buf); }