diff --git a/include/arraylist.h b/include/arraylist.h index e49cde1..a36d1b6 100644 --- a/include/arraylist.h +++ b/include/arraylist.h @@ -62,6 +62,6 @@ ArrayListErr arrayslice_next(ArraySlice *slice, void *out); ArrayListErr arrayslice_reset(ArraySlice *slice); ArrayListErr arrayslice_advance(ArraySlice *slice, size_t n); -ArrayListErr arrayslice_to_arraylist(ArrayList *arr, const ArraySlice *slice); +ArrayListErr arrayslice_to_arraylist(ArrayList **arr, const ArraySlice *slice); #endif diff --git a/src/arraylist.c b/src/arraylist.c index c050a0a..cd101d0 100644 --- a/src/arraylist.c +++ b/src/arraylist.c @@ -584,13 +584,17 @@ ArrayListErr arrayslice_advance(ArraySlice *slice, size_t n) { return ARRLIST_OK; } -ArrayList *arrayslice_to_arraylist(const ArraySlice *slice) { +ArrayListErr arrayslice_to_arraylist(ArrayList **arr, const ArraySlice *slice) { if (slice == NULL || slice->arr == NULL) { - return NULL; + return ARRLIST_NULL_ARG; + } + + if (arr == NULL || *arr == NULL) { + return ARRLIST_NULL_ARG; } if (slice->start >= slice->end) { - return NULL; + return ARRLIST_INVALID_SLICE; } size_t len = slice->end - slice->start; @@ -601,8 +605,9 @@ ArrayList *arrayslice_to_arraylist(const ArraySlice *slice) { arraylist_capacity(slice->arr), slice->arr->elem_size ); - if (new_arr == NULL) { - return NULL; + + if (init_err != ARRLIST_OK) { + return init_err; } memcpy( @@ -613,5 +618,6 @@ ArrayList *arrayslice_to_arraylist(const ArraySlice *slice) { new_arr->len = len; - return new_arr; + *arr = new_arr; + return ARRLIST_OK; }