From 750643d1c7dd0b278f767eb832bb4e570c01d83f Mon Sep 17 00:00:00 2001 From: Mole Shang <135e2@135e2.dev> Date: Wed, 9 Aug 2023 14:38:50 +0800 Subject: utils/types: support resizing an array to 0 --- src/utils/types.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'src/utils') diff --git a/src/utils/types.c b/src/utils/types.c index ebedd0e..390d34c 100644 --- a/src/utils/types.c +++ b/src/utils/types.c @@ -20,7 +20,13 @@ void free_array(generic_array_t *array) { } void resize_array(generic_array_t *array, size_t new_size) { - array->data = realloc(array->data, array->elem_size * new_size); + if (new_size) { + array->data = realloc(array->data, array->elem_size * new_size); + } else { + size_t elem_size = array->elem_size; + free_array(array); + create_array(elem_size, 0); + } array->n = new_size; } @@ -52,9 +58,14 @@ void free_str_array(str_array_t *array) { } void resize_str_array(str_array_t *array, size_t new_size) { - array->str = realloc(array->str, sizeof(char *) * new_size); - for (size_t i = array->n; i < new_size; i++) { - array->str[i] = NULL; + if (new_size) { + array->str = realloc(array->str, sizeof(char *) * new_size); + for (size_t i = array->n; i < new_size; i++) { + array->str[i] = NULL; + } + } else { + free_str_array(array); + *array = create_str_array(0); } array->n = new_size; } -- cgit v1.2.3