Compare commits

..

No commits in common. "c1b914cb8e284793c0bf2e27965782f1c315d719" and "44080e85cc6cf07d799ae04b014eb1b51587811d" have entirely different histories.

2 changed files with 13 additions and 2 deletions

View file

@ -23,10 +23,13 @@
int main(int argc, const char **argv) { int main(int argc, const char **argv) {
simple_archiver_print_usage(); simple_archiver_print_usage();
__attribute__((cleanup(simple_archiver_free_parsed))) //__attribute__((cleanup(simple_archiver_free_parsed)))
SDArchiverParsed parsed = simple_archiver_create_parsed(); SDArchiverParsed parsed = simple_archiver_create_parsed();
simple_archiver_parse_args(argc, argv, &parsed); simple_archiver_parse_args(argc, argv, &parsed);
puts("freeing");
simple_archiver_free_parsed(&parsed);
puts("end");
return 0; return 0;
} }

View file

@ -98,22 +98,25 @@ int simple_archiver_parse_args(int argc, const char **argv,
} }
} else { } else {
if (out->working_files == NULL) { if (out->working_files == NULL) {
puts("first addition to working_files");
out->working_files = malloc(sizeof(char *) * 2); out->working_files = malloc(sizeof(char *) * 2);
int arg_length = strlen(argv[0]) + 1; int arg_length = strlen(argv[0]) + 1;
out->working_files[0] = malloc(arg_length); out->working_files[0] = malloc(arg_length);
strncpy(out->working_files[0], argv[0], arg_length); strncpy(out->working_files[0], argv[0], arg_length);
out->working_files[1] = NULL; out->working_files[1] = NULL;
} else { } else {
puts("later addition to working_files");
int working_size = 1; int working_size = 1;
char **ptr = out->working_files; char **ptr = out->working_files;
while (ptr && *ptr) { while (ptr && *ptr) {
++working_size; ++working_size;
++ptr; ++ptr;
} }
printf("working_size is %u\n", working_size);
// TODO verify this is necessary, using different variables. // TODO verify this is necessary, using different variables.
ptr = out->working_files; ptr = out->working_files;
out->working_files = realloc(ptr, sizeof(char *) * (working_size + 1)); out->working_files = realloc(ptr, working_size + 1);
// Set new actual last element to NULL. // Set new actual last element to NULL.
out->working_files[working_size] = NULL; out->working_files[working_size] = NULL;
@ -148,11 +151,16 @@ void simple_archiver_free_parsed(SDArchiverParsed *parsed) {
if (parsed->working_files) { if (parsed->working_files) {
char **ptr = parsed->working_files; char **ptr = parsed->working_files;
unsigned int idx = 0; unsigned int idx = 0;
puts("freeing working_files strings...");
while (ptr[idx]) { while (ptr[idx]) {
printf("Freeing at idx %u\n", idx);
free(ptr[idx]); free(ptr[idx]);
++idx; ++idx;
} }
puts("freeing string array...");
free(parsed->working_files); free(parsed->working_files);
parsed->working_files = NULL; parsed->working_files = NULL;
puts("free_parsed is done.");
} }
} }