Fix memory leaks in C impl
This commit is contained in:
parent
de037d060c
commit
2660e765c3
1 changed files with 9 additions and 6 deletions
|
@ -39,15 +39,15 @@ void append_strdlist(StrDList *head, const char *string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void cleanup_strdlist(StrDList **head) {
|
void cleanup_strdlist(StrDList **head) {
|
||||||
|
if (!head || !*head) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
StrDList *current = *head;
|
StrDList *current = *head;
|
||||||
while (current->next) {
|
while (current->next) {
|
||||||
current = current->next;
|
current = current->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*head == current) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (current->prev) {
|
while (current->prev) {
|
||||||
current = current->prev;
|
current = current->prev;
|
||||||
if (current->next->string) {
|
if (current->next->string) {
|
||||||
|
@ -188,12 +188,14 @@ int main(int argc, char **argv) {
|
||||||
ParsedArgs args = parse_args(argc, argv);
|
ParsedArgs args = parse_args(argc, argv);
|
||||||
|
|
||||||
if (args.error) {
|
if (args.error) {
|
||||||
|
cleanup_strdlist(&args.fields);
|
||||||
return 1;
|
return 1;
|
||||||
} else if (args.usage_printed) {
|
} else if (args.usage_printed) {
|
||||||
|
cleanup_strdlist(&args.fields);
|
||||||
return 0;
|
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");
|
FILE *csv_fd = fopen(args.input_filename, "r");
|
||||||
if (!csv_fd) {
|
if (!csv_fd) {
|
||||||
|
@ -232,6 +234,7 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// do printing of only the chosen columns
|
// do printing of only the chosen columns
|
||||||
|
size_t number_of_entries = idx;
|
||||||
idx = 0;
|
idx = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
CSVEntry entry = get_field(csv_fd, idx);
|
CSVEntry entry = get_field(csv_fd, idx);
|
||||||
|
@ -254,7 +257,7 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(csv_fd);
|
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) {
|
if (entries[i].buf) {
|
||||||
free(entries[i].buf);
|
free(entries[i].buf);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue