Compare commits
No commits in common. "c1b914cb8e284793c0bf2e27965782f1c315d719" and "44080e85cc6cf07d799ae04b014eb1b51587811d" have entirely different histories.
c1b914cb8e
...
44080e85cc
2 changed files with 13 additions and 2 deletions
|
@ -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;
|
||||
}
|
||||
|
|
10
src/parser.c
10
src/parser.c
|
@ -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.");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue