summaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
authorMole Shang <[email protected]>2023-08-09 14:38:50 +0800
committerMole Shang <[email protected]>2023-08-09 14:41:36 +0800
commit750643d1c7dd0b278f767eb832bb4e570c01d83f (patch)
tree722f89bff6a2668bd86361607732bfa130ffd4a3 /src/utils
parent9c2b0b39d73da02bb9d255e9dc7f81db200930b1 (diff)
downloadhinata-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.c19
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;
}