diff --git a/src/main.c b/src/main.c index 27a83e097a188d4c905129df216b836de287f78e..cca224c687c8d6ec6227f81f1e13996ce8644f86 100644 --- a/src/main.c +++ b/src/main.c @@ -5,41 +5,44 @@ #include "commands.h" #include "utils.h" +static void release_argv(int argc, char** argv); + int main() { char buf[8096]; int argc; char** argv; - // initialize command buffer - argv = (char**)malloc(32); - for (int i = 0; i < 32; ++i) { - argv[i] = (char*)malloc(8096); - } - while (1) { fgets(buf, 8096, stdin); - mysh_parse_command(buf, &argc, argv); + mysh_parse_command(buf, &argc, &argv); if (strcmp(buf, "") == 0) { - continue; + goto release_and_continue; } else if (strcmp(argv[0], "cd") == 0) { do_cd(argc, argv); } else if (strcmp(argv[0], "pwd") == 0) { do_pwd(argc, argv); } else if (strcmp(argv[0], "exit") == 0) { - break; + goto release_and_continue; } else { fprintf(stderr, "%s: command not found\n", argv[0]); } +release_and_continue: + release_argv(argc, argv); + continue; +release_and_exit: + release_argv(argc, argv); + break; } - // destroy command buffer - for (int i = 0; i < 32; ++i) { + return 0; +} + +static void release_argv(int argc, char** argv) { + for (int i = 0; i < argc; ++i) { free(argv[i]); } free(argv); - - return 0; }