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')

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