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) {
simple_archiver_print_usage();
__attribute__((cleanup(simple_archiver_free_parsed)))
//__attribute__((cleanup(simple_archiver_free_parsed)))
SDArchiverParsed parsed = simple_archiver_create_parsed();
simple_archiver_parse_args(argc, argv, &parsed);
puts("freeing");
simple_archiver_free_parsed(&parsed);
puts("end");
return 0;
}

View file

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