# HG changeset patch # User Mike Becker # Date 1782813616 -7200 # Node ID 9637e3efb8e723c32b287624788e205f25c98fa8 # Parent cd301312612926651b6db3f3c0a2008473a20f22 add element destructor to string_list diff -r cd3013126129 -r 9637e3efb8e7 src/cline.c --- 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) { diff -r cd3013126129 -r 9637e3efb8e7 src/string_list.c --- 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 +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); diff -r cd3013126129 -r 9637e3efb8e7 src/string_list.h --- a/src/string_list.h Tue Jun 30 11:55:49 2026 +0200 +++ b/src/string_list.h Tue Jun 30 12:00:16 2026 +0200 @@ -33,6 +33,7 @@ size_t count; size_t capacity; char** items; + void (*free_item)(void*); } string_list_t; #ifdef _cplusplus