Handle NULL pointers in base arena
This commit is contained in:
		| @@ -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); | ||||||
|   } |   } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user