diff --git a/Main.c b/Main.c index 932d1a6b548de554fd1566a6c9980cb5d003dbbc..dc945ef525eb701af3769e418befbcb3b1267188 100644 --- a/Main.c +++ b/Main.c @@ -85,7 +85,7 @@ void change_directory(); // Change current directory. char* get_directory_path(); // Gets full pathname of current directory. void get_umask(); // Gets current umask value. void set_umask(); // Sets umask value. -void handler(); // Handler for ctrl+c signal. +void interupt_handler(); // Handler for ctrl+c signal. void free_memory(); // Frees memory of vars. void make_arg_example(); @@ -103,7 +103,7 @@ int main(int argc, char* argv[]) { // Set ctrl+c signal interupt. memset(&action, '\0', sizeof(action)); - action.sa_handler = handler; + action.sa_handler = interupt_handler; action.sa_flags = SA_RESTART; sigaction(SIGINT, &action, NULL); @@ -148,6 +148,7 @@ int main(int argc, char* argv[]) { user_input = get_user_input_with_prompt(""); free(current_directory); parse_line(user_input); + free(user_input); // Make sure at least one command is present. if (line_argv->argc > 0) { @@ -201,8 +202,6 @@ int main(int argc, char* argv[]) { } else { execute_command(); } - - free(user_input); free_memory(); } } @@ -323,8 +322,11 @@ void recursive_execute(int argc, makeargv_struct* args, int current_arg) { ++temp_pointer; index++; } - execvp(**temp_pointer->argv, *temp_pointer->argv); - err_sys("Failed to exec."); + if (execvp(**temp_pointer->argv, *temp_pointer->argv) == -1) { + err_msg("Invalid exec arg(s)."); + free_memory(); + exit(-1); + } } } @@ -435,7 +437,7 @@ void set_umask(char* string_val) { /** * Handler for ctrl+c signal. */ -void handler() { +void interupt_handler() { printf(" - Nope.\n"); }