diff --git a/To b/To new file mode 100644 index 00000000..e69de29b diff --git a/inc/tokens.h b/inc/tokens.h index 3ba72b6e..1d1e3240 100644 --- a/inc/tokens.h +++ b/inc/tokens.h @@ -6,7 +6,7 @@ /* By: rmikhayl +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/31 20:53:51 by rmikhayl #+# #+# */ -/* Updated: 2024/06/07 19:00:49 by rmikhayl ### ########.fr */ +/* Updated: 2024/06/11 14:59:54 by rocky ### ########.fr */ /* */ /* ************************************************************************** */ @@ -50,7 +50,9 @@ void parse_loop(char **input, char **tokens, int *pos, int *bufsize); char **parse_input(char *input); char *generate_prompt(t_minishell_data *data); void make_history(char *line); -void cleanup(char *line, char **parsed_text, t_token *tokens); +void cleanup(char *line, char **parsed_text, t_token *tokens, \ + char *prompt); +void free_minishell_data(t_minishell_data *data); char *check_heredoc(char *line); char *heredoc(char *eof); void init_minishell_data(t_minishell_data *data, char **envp); diff --git a/src/main.c b/src/main.c index 0bde8871..62c376f4 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ /* By: rmikhayl +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/05 13:23:26 by rmikhayl #+# #+# */ -/* Updated: 2024/06/10 17:45:18 by dmdemirk ### ########.fr */ +/* Updated: 2024/06/11 15:22:12 by rocky ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,30 +28,38 @@ void is_exit_status_var(char *line) exit_status_var(); } -int main(int argc, char **argv, char **envp) +void main_loop(t_minishell_data data) { - t_minishell_data data; + char *prompt; char *line; t_token *tokens; char **parsed_text; + prompt = generate_prompt(&data); + tokens = NULL; + line = readline(prompt); + is_exit_status_var(line); + line = check_heredoc(line); + if (!line || ft_strcmp(line, "exit") == 0) + exit(EXIT_FAILURE); + make_history(line); + parsed_text = parse_input(line); + execute_command(parsed_text, &tokens); + data.args = list_to_array(tokens); + execute(&data); + cleanup(line, parsed_text, tokens, prompt); +} + +int main(int argc, char **argv, char **envp) +{ + t_minishell_data data; + print_maxishell(); init_minishell_data(&data, envp); initialise(argc, argv); while (1) - { - tokens = NULL; - line = readline(generate_prompt(&data)); - is_exit_status_var(line); - line = check_heredoc(line); - if (!line || ft_strcmp(line, "exit") == 0) - break ; - make_history(line); - parsed_text = parse_input(line); - execute_command(parsed_text, &tokens); - data.args = list_to_array(tokens); - execute(&data); - cleanup(line, parsed_text, tokens); - } + main_loop(data); + free_minishell_data(&data); + free_env(data.envp); return (0); } diff --git a/src/parser/output.txt b/src/parser/output.txt deleted file mode 100644 index 3e1ec636..00000000 --- a/src/parser/output.txt +++ /dev/null @@ -1 +0,0 @@ -Executing command: grep "test" diff --git a/src/utils/clean.c b/src/utils/clean.c index 9b959157..0e5d46d1 100644 --- a/src/utils/clean.c +++ b/src/utils/clean.c @@ -3,18 +3,59 @@ /* ::: :::::::: */ /* clean.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: rmikhayl +#+ +:+ +#+ */ +/* By: rocky +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2024/06/05 17:20:07 by rmikhayl #+# #+# */ -/* Updated: 2024/06/05 17:20:20 by rmikhayl ### ########.fr */ +/* Created: 2024/06/11 14:56:25 by rocky #+# #+# */ +/* Updated: 2024/06/11 14:58:49 by rocky ### ########.fr */ /* */ /* ************************************************************************** */ #include "tokens.h" +#include "env.h" -void cleanup(char *line, char **parsed_text, t_token *tokens) +void free_args(char **args) +{ + int i; + + i = 0; + if (args) + { + while (args[i] != NULL) + free(args[i++]); + free(args); + } +} + +void free_env_list(t_env *env) +{ + t_env *temp; + + while (env) + { + free(env->key); + free(env->value); + temp = env; + env = env->next; + free(temp); + } +} + +void free_minishell_data(t_minishell_data *data) +{ + if (data) + { + free_args(data->args); + free_env_list(data->envp); + free_env_list(data->local_env); + free(data->current_dir); + free(data); + } +} + +void cleanup(char *line, char **parsed_text, t_token *tokens, char *prompt) { free(line); free(parsed_text); free_stack(&tokens); + free(prompt); }