Handle NULL pointers in base arena
This commit is contained in:
parent
633632105b
commit
9513c05b75
@ -26,6 +26,10 @@ internal void base_arena_clear(BaseArena *arena);
|
|||||||
internal void base_arena_free(BaseArena *arena);
|
internal void base_arena_free(BaseArena *arena);
|
||||||
|
|
||||||
internal bool base_arena_init(BaseArena *arena, u64 capacity) {
|
internal bool base_arena_init(BaseArena *arena, u64 capacity) {
|
||||||
|
if (!arena || arena->buf) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
u64 alloc_size = sizeof(u8) * capacity;
|
u64 alloc_size = sizeof(u8) * capacity;
|
||||||
|
|
||||||
arena->buf = (u8 *)malloc(alloc_size);
|
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,
|
internal void *base_arena_alloc_aligned(BaseArena *arena, u64 size,
|
||||||
u64 alignment) {
|
u64 alignment) {
|
||||||
|
if (!arena) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
u8 *output = mem_util_align_forward((void *)(arena->offset), alignment);
|
u8 *output = mem_util_align_forward((void *)(arena->offset), alignment);
|
||||||
if (output + size >= arena->buf + arena->capacity) {
|
if (output + size >= arena->buf + arena->capacity) {
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -58,11 +66,19 @@ internal void *base_arena_alloc_aligned(BaseArena *arena, u64 size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void base_arena_clear(BaseArena *arena) {
|
internal void base_arena_clear(BaseArena *arena) {
|
||||||
|
if (!arena) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
memset(arena->buf, 0, arena->offset - arena->buf);
|
memset(arena->buf, 0, arena->offset - arena->buf);
|
||||||
arena->offset = arena->buf;
|
arena->offset = arena->buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void base_arena_free(BaseArena *arena) {
|
internal void base_arena_free(BaseArena *arena) {
|
||||||
|
if (!arena) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (arena->buf) {
|
if (arena->buf) {
|
||||||
free(arena->buf);
|
free(arena->buf);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user