From 2660e765c3b948c3135fdc0cd22f3af8791aca8e Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Wed, 23 Mar 2022 23:01:37 +0900 Subject: [PATCH] Fix memory leaks in C impl --- c_impl/src/main.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/c_impl/src/main.c b/c_impl/src/main.c index ab25a35..0d033ea 100644 --- a/c_impl/src/main.c +++ b/c_impl/src/main.c @@ -39,15 +39,15 @@ void append_strdlist(StrDList *head, const char *string) { } void cleanup_strdlist(StrDList **head) { + if (!head || !*head) { + return; + } + StrDList *current = *head; while (current->next) { current = current->next; } - if (*head == current) { - return; - } - while (current->prev) { current = current->prev; if (current->next->string) { @@ -188,12 +188,14 @@ int main(int argc, char **argv) { ParsedArgs args = parse_args(argc, argv); if (args.error) { + cleanup_strdlist(&args.fields); return 1; } else if (args.usage_printed) { + cleanup_strdlist(&args.fields); return 0; } - size_t field_count = print_and_count_strdlist(args.fields); + print_and_count_strdlist(args.fields); FILE *csv_fd = fopen(args.input_filename, "r"); if (!csv_fd) { @@ -232,6 +234,7 @@ int main(int argc, char **argv) { } // do printing of only the chosen columns + size_t number_of_entries = idx; idx = 0; while (1) { CSVEntry entry = get_field(csv_fd, idx); @@ -254,7 +257,7 @@ int main(int argc, char **argv) { } fclose(csv_fd); - for (size_t i = 0; i < field_count; ++i) { + for (size_t i = 0; i < number_of_entries; ++i) { if (entries[i].buf) { free(entries[i].buf); }