From e548acdb8a7ce3cb7766b5ea505ddf0d41c87320 Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Fri, 16 Jul 2021 13:35:29 -0400 Subject: [PATCH] change the way string arrays are initialized --- src/array.c | 35 +++++++++++++++++------------------ src/include/array.h | 2 +- src/loop.c | 15 +++++++-------- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/array.c b/src/array.c index 55bcff4..cf60ace 100644 --- a/src/array.c +++ b/src/array.c @@ -19,11 +19,13 @@ /** * Create a String Array by initializing its structure. - * @param string_array The String Array to create. + * @return Returns a new String Array. */ -void create_string_array(StringArray *string_array) { +StringArray *create_string_array() { + StringArray *string_array = malloc(sizeof(StringArray)); string_array->array = NULL; string_array->size = 0; + return string_array; } /** @@ -93,22 +95,19 @@ void delete_string_array(StringArray *string_array, int index) { * @param string_array The String Array to free. */ void free_string_array(StringArray *string_array) { - if (string_array->array == NULL) { - fprintf(stderr, "StringArray is not freeable!\n"); - free_string_array(string_array); - exit(EXIT_FAILURE); + for (size_t i = 0; i < string_array->size; i++) { + if (string_array->array[i] != NULL) { + free(string_array->array[i]); + string_array->array[i] = NULL; + } } - else { - for (size_t i = 0; i < string_array->size; i++) { - if (string_array->array[i] != NULL) { - free(string_array->array[i]); - string_array->array[i] = NULL; - } - } - if (string_array->array != NULL) { - free(string_array->array); - string_array->array = NULL; - } - string_array->size = 0; + if (string_array->array != NULL) { + free(string_array->array); + string_array->array = NULL; + } + string_array->size = 0; + if (string_array != NULL) { + free(string_array); + string_array = NULL; } } diff --git a/src/include/array.h b/src/include/array.h index 23a70d3..a30e90d 100644 --- a/src/include/array.h +++ b/src/include/array.h @@ -27,7 +27,7 @@ typedef struct { size_t size; } CleanArray; -void create_string_array(StringArray *string_array); +StringArray *create_string_array(); void insert_string_array(StringArray *string_array, char *string); diff --git a/src/loop.c b/src/loop.c index 443b5e0..e7d2aad 100644 --- a/src/loop.c +++ b/src/loop.c @@ -64,13 +64,12 @@ void loop() { char *line = get_console_input(); - StringArray args; - create_string_array(&args); + StringArray *args = create_string_array(); char *saveptr = NULL; char *token = strtok_r(line, " ", &saveptr); while (token) { - insert_string_array(&args, token); + insert_string_array(args, token); token = strtok_r(NULL, " ", &saveptr); } if (line != NULL) { @@ -79,17 +78,17 @@ void loop() { } // The user didn't type anything so restart the loop - if (args.size == 0) { + if (args->size == 0) { continue; } - if (is_builtin(args.array[0])) { - run_builtin(&args); + if (is_builtin(args->array[0])) { + run_builtin(args); } else { - launch_program(&args); + launch_program(args); } - free_string_array(&args); + free_string_array(args); } }