From cfdd25cdd8efabaa43446036e0ff0c326c001f8f Mon Sep 17 00:00:00 2001 From: "@syxhe" Date: Tue, 25 Mar 2025 18:13:14 -0500 Subject: Change function signature of (simple)arena_init function --- src/arena.c | 73 +++++++++++++++++++++++++++++++------------------------------ src/arena.h | 4 ++-- src/main.c | 22 ++++++++++++++++++- 3 files changed, 60 insertions(+), 39 deletions(-) diff --git a/src/arena.c b/src/arena.c index 870edca..36a9ce7 100644 --- a/src/arena.c +++ b/src/arena.c @@ -26,53 +26,52 @@ typedef struct arena { size_t node_memspace; } arena; -int arenanode_init(arenanode **an, size_t bytes) { - (*an) = VALLOC(1, sizeof(**an)); - if(!(*an)) - return -1; - - (*an)->allocated = bytes; - (*an)->used = 0; - (*an)->next = NULL; +arenanode * arenanode_init(size_t bytes) { + arenanode *an = VALLOC(1, sizeof(*an)); + if(!an) + return NULL; + + an->allocated = bytes; + an->used = 0; + an->next = NULL; void *mem = VALLOC(bytes, 1); if(!mem) { - free((*an)); - (*an) = NULL; - return -1; + free(an); + return NULL; } - (*an)->membase = mem; - (*an)->memcur = mem; + an->membase = mem; + an->memcur = mem; - return 0; + return an; } -int arena_init(arena **a, size_t bytes) { +arena * arena_init(size_t bytes) { if(!ISPOWOF2(MEM_ALIGN_BYTES)) XALLOC_EXIT(" \"MEM_ALIGN_BYTES\" is not a power of 2. Refusing to create a new arena"); - (*a) = VALLOC(1, sizeof(**a)); - if(!(*a)) - return -1; - (*a)->start = NULL; - (*a)->current = NULL; - (*a)->node_memspace = bytes; - - arenanode *base; - if(arenanode_init(&base, bytes) < 0) { - free(*a); - (*a) = NULL; - return -1; + arena *a = VALLOC(1, sizeof(arena)); + if(!a) + return NULL; + + a->start = NULL; + a->current = NULL; + a->node_memspace = bytes; + + arenanode *base = arenanode_init(bytes); + if(!base) { + free(a); + return NULL; } - (*a)->start = base; - (*a)->current = base; + a->start = base; + a->current = base; - return 0; + return a; } -void* arena_alloc(arena * const arena, size_t bytes) { +void * arena_alloc(arena * const arena, size_t bytes) { if(!ISPOWOF2(MEM_ALIGN_BYTES)) XALLOC_EXIT(" \"MEM_ALIGN_BYTES\" is not a power of 2. Refusing to allocate any memory"); if(!arena) @@ -81,8 +80,8 @@ void* arena_alloc(arena * const arena, size_t bytes) { RETURNWERR(ENOMEM, NULL); if(bytes > ((arena->current)->allocated - (arena->current)->used)) { - arenanode *new; - if(arenanode_init(&new, arena->node_memspace) < 0) + arenanode *new = arenanode_init(arena->node_memspace); + if(!new) return NULL; arena->current->next = new; @@ -135,7 +134,9 @@ int arena_clear(arena **arena) { int ret = 0; if((ret = arena_free(arena)) < 0) return ret; - return arena_init(arena, bytes); + (*arena) = arena_init(bytes); + + return (!(*arena)) ? -1 : 0; } @@ -144,8 +145,8 @@ int arena_clear(arena **arena) { typedef arena simplearena; -int simplearena_init(simplearena **a, size_t bytes) { - return arena_init(a, bytes); +simplearena * simplearena_init(size_t bytes) { + return arena_init(bytes); } void* simplearena_alloc(simplearena * const a, size_t bytes) { diff --git a/src/arena.h b/src/arena.h index e656f9a..1f57f01 100644 --- a/src/arena.h +++ b/src/arena.h @@ -14,12 +14,12 @@ typedef arena simplearena; static const size_t MEM_ALIGN_BYTES = (2 * sizeof(void*)); // Hey, the static keyword did something for once! #define MEM_ALIGN(x) ((x) + (((x) & (MEM_ALIGN_BYTES - 1)) != 0) * (MEM_ALIGN_BYTES - ((x) & (MEM_ALIGN_BYTES - 1)))) -int arena_init(arena **a, size_t bytes); +arena * arena_init(size_t bytes); void* arena_alloc(arena * const arena, size_t bytes); int arena_free(arena **arena); int arena_clear(arena **arena); -int simplearena_init(simplearena **a, size_t bytes); +simplearena * simplearena_init(size_t bytes); void* simplearena_alloc(simplearena * const a, size_t bytes); int simplearena_free(simplearena **a); int simplearena_free(simplearena **a); diff --git a/src/main.c b/src/main.c index f3ca77e..d76e20d 100644 --- a/src/main.c +++ b/src/main.c @@ -7,8 +7,28 @@ #include #include +#include +#include int main() { - error(1, ENOTSUP, "No main file lol"); + // error(1, ENOTSUP, "No main file lol"); + + // Testing Arena changes + const int DATA[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + + arena *arena = arena_init(sizeof(DATA)); + if(!arena) + error(1, errno, "Could not initialize arena"); + + int *nums = arena_alloc(arena, sizeof(DATA)); + if(!nums) + error(1, errno, "Could not allocate memory"); + + memmove(nums, DATA, sizeof(DATA)); + for(unsigned int i = 0; i < STATIC_ARRAY_LEN(DATA); i++) + printf("%d ", nums[i]); + printf("\n"); + + arena_free(&arena); return 0; } \ No newline at end of file -- cgit v1.2.3