Tue, 30 Jun 2026 12:00:16 +0200
add element destructor to string_list
| src/cline.c | file | annotate | diff | comparison | revisions | |
| src/string_list.c | file | annotate | diff | comparison | revisions | |
| src/string_list.h | file | annotate | diff | comparison | revisions |
--- a/src/cline.c Tue Jun 30 11:55:49 2026 +0200 +++ b/src/cline.c Tue Jun 30 12:00:16 2026 +0200 @@ -290,14 +290,17 @@ } for (unsigned t = 0 ; t < directories->count ; t++) { /* Don't waste memory when only the total sum is needed */ - string_list_t *output = settings->verbose ? new_string_list_t() : NULL; + string_list_t *output = NULL; + if (settings->verbose) { + output = new_string_list_t(); + output->free_item = free; + } scanDirectory((scanner_t){directories->items[t], 0}, settings, output, result); total += result->result; if (settings->verbose) { has_output |= output->count > 0; for (int i = 0 ; i < output->count ; i++) { printf("%s", output->items[i]); - free(output->items[i]); } destroy_string_list_t(output); if (directories->count > 1) {
--- a/src/string_list.c Tue Jun 30 11:55:49 2026 +0200 +++ b/src/string_list.c Tue Jun 30 12:00:16 2026 +0200 @@ -28,11 +28,15 @@ #include <assert.h> +static void do_not_free(void* item) { +} + string_list_t* new_string_list_t() { string_list_t* stringList = malloc(sizeof(string_list_t)); stringList->count = 0; stringList->capacity = 32; stringList->items = calloc(sizeof(char*), stringList->capacity); + stringList->free_item = do_not_free; return stringList; } @@ -40,6 +44,9 @@ void destroy_string_list_t(string_list_t* list) { if (list) { if (list->items) { + for (size_t i = 0 ; i < list->count ; i++) { + list->free_item(list->items[i]); + } free(list->items); } free(list);