Handle NULL pointers in base arena

This commit is contained in:
Abdelrahman Said 2024-02-24 18:44:43 +00:00
parent 633632105b
commit 9513c05b75

View File

@ -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);
}