diff options
author | Mole Shang <[email protected]> | 2023-08-09 14:38:50 +0800 |
---|---|---|
committer | Mole Shang <[email protected]> | 2023-08-09 14:41:36 +0800 |
commit | 750643d1c7dd0b278f767eb832bb4e570c01d83f (patch) | |
tree | 722f89bff6a2668bd86361607732bfa130ffd4a3 /src/utils | |
parent | 9c2b0b39d73da02bb9d255e9dc7f81db200930b1 (diff) | |
download | hinata-750643d1c7dd0b278f767eb832bb4e570c01d83f.tar.gz hinata-750643d1c7dd0b278f767eb832bb4e570c01d83f.tar.bz2 hinata-750643d1c7dd0b278f767eb832bb4e570c01d83f.zip |
utils/types: support resizing an array to 0
Diffstat (limited to 'src/utils')
-rw-r--r-- | src/utils/types.c | 19 |
1 files changed, 15 insertions, 4 deletions
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; } |