From d69a74dad2d7e56e7a2a1d238d975888e0f83802 Mon Sep 17 00:00:00 2001 From: laentropia Date: Wed, 13 May 2026 20:42:04 -0600 Subject: [PATCH] refactor: init takes pointer to pointer for compatibliity Its better for me this way, its just this little change at least, next is fucking going and fixig all damn tests, the fucking wors part --- include/arraylist.h | 2 +- src/arraylist.c | 32 +++++++++++++++++++------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/include/arraylist.h b/include/arraylist.h index a22f97e..7f0af97 100644 --- a/include/arraylist.h +++ b/include/arraylist.h @@ -22,7 +22,7 @@ typedef enum { ARRLIST_INVALID_SLICE, } ArrayListErr; -ArrayList *arraylist_init(size_t capacity, size_t elem_size); +ArrayListErr arraylist_init(ArrayList **arr, size_t capacity, size_t elem_size); ArrayListErr arraylist_destroy(ArrayList **arr); ArrayListErr arraylist_clear(ArrayList *arr); ArrayList *arraylist_clone(const ArrayList *arr); diff --git a/src/arraylist.c b/src/arraylist.c index bbbaa65..e38808d 100644 --- a/src/arraylist.c +++ b/src/arraylist.c @@ -26,34 +26,40 @@ struct ArraySlice { static ArrayListErr arraylist_grow(ArrayList *arr); static ArrayListErr arraylist_shrink(ArrayList *arr); -ArrayList *arraylist_init(size_t capacity, size_t elem_size) { +ArrayListErr arraylist_init(ArrayList **arr, size_t capacity, size_t elem_size) { + if (arr == NULL || *arr == NULL) { + return ARRLIST_NULL_ARG; + } + if (capacity == 0) { - return NULL; + return ARRLIST_INVALID_CAPACITY; } if (elem_size == 0) { - return NULL; + return ARRLIST_INVALID_ELEM_SIZE; } if (capacity > SIZE_MAX / elem_size) { - return NULL; + return ARRLIST_INVALID_CAPACITY; } - ArrayList *arr = malloc(sizeof(ArrayList)); + ArrayList *new_arr = malloc(sizeof(ArrayList)); if (arr == NULL) { - return NULL; + return ARRLIST_BAD_ALLOC; } - arr->capacity = capacity; - arr->elem_size = elem_size; - arr->len = 0; - arr->borrows = 0; - arr->buffer = malloc(capacity * elem_size); - if (arr->buffer == NULL) { + + new_arr->capacity = capacity; + new_arr->elem_size = elem_size; + new_arr->len = 0; + new_arr->borrows = 0; + new_arr->buffer = malloc(capacity * elem_size); + if (new_arr->buffer == NULL) { free(arr); return NULL; } - return arr; + *arr = new_arr; + return ARRLIST_OK; } ArrayListErr arraylist_destroy(ArrayList **arr) {