diff --git a/headers/minishell_prototypes.h b/headers/minishell_prototypes.h index 088460a..7cf8fb4 100644 --- a/headers/minishell_prototypes.h +++ b/headers/minishell_prototypes.h @@ -6,7 +6,7 @@ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/10/08 02:59:58 by lperrey #+# #+# */ -/* Updated: 2021/11/13 04:20:43 by lperrey ### ########.fr */ +/* Updated: 2021/11/14 00:35:59 by lperrey ### ########.fr */ /* */ /* ************************************************************************** */ @@ -44,6 +44,7 @@ int builtin_echo(int argc, char *argv[], t_all *c); // Free int free_exit(t_all *c, int exit_status); +void ft_free_cmd_arr(t_cmd **cmd_arr); // Generic char *ft_strjoinfree(char *s1, char *s2); diff --git a/srcs/free.c b/srcs/free.c index d02f438..7cbfeba 100644 --- a/srcs/free.c +++ b/srcs/free.c @@ -6,7 +6,7 @@ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/10/10 23:53:17 by lperrey #+# #+# */ -/* Updated: 2021/10/30 14:18:09 by lperrey ### ########.fr */ +/* Updated: 2021/11/14 04:48:49 by lperrey ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,8 +18,30 @@ int free_exit(t_all *c, int exit_status) free(c->prompt); ft_lstclear((t_list **)&c->token_list, free); // a voir avec Hugo, il y a un truc qui me semble superflu dans la fonction ft_free_2d_arr(c->envp); + ft_free_cmd_arr(c->cmd_arr); if (c->termios_changed) tcsetattr(STDIN_FILENO, TCSANOW, &c->ori_termios); rl_clear_history(); exit(exit_status); } + +void ft_free_cmd_arr(t_cmd **cmd_arr) +{ + int i; + + if (!cmd_arr) + return ; + i = 0; + while (cmd_arr[i]) + { + ft_free_2d_arr(cmd_arr[i]->argv); + if (cmd_arr[i]->fd_in != STDIN_FILENO && cmd_arr[i]->fd_in > 0) + if (close(cmd_arr[i]->fd_in) == -1) + perror("close()"); + if (cmd_arr[i]->fd_out != STDOUT_FILENO && cmd_arr[i]->fd_out > 0) + if (close(cmd_arr[i]->fd_out) == -1) + perror("close()"); + i++; + } + ft_free_2d_arr(cmd_arr); +} diff --git a/srcs/parsing/expansions/ft_split_quotes.c b/srcs/parsing/expansions/ft_split_quotes.c index d235c96..83ccb22 100644 --- a/srcs/parsing/expansions/ft_split_quotes.c +++ b/srcs/parsing/expansions/ft_split_quotes.c @@ -64,7 +64,7 @@ static size_t count_word(char const *s, char c) { while (quote_state_change("e_state, &s[i])) i++; - if (s[i] != c || quote_state) + if (s[i] && (s[i] != c || quote_state)) i++; } } @@ -152,7 +152,7 @@ static void fill_arr(char const *s, char c, char **str_arr) { while (quote_state_change("e_state, &s[i])) str_arr[arr_i][char_i++] = s[i++]; - if (s[i] != c || quote_state) + if (s[i] && (s[i] != c || quote_state)) str_arr[arr_i][char_i++] = s[i++]; } str_arr[arr_i][char_i] = '\0'; //superflu si ft_calloc diff --git a/srcs/parsing/expansions/ft_strdup_quotes.c b/srcs/parsing/expansions/ft_strdup_quotes.c index 9990472..465bf1d 100644 --- a/srcs/parsing/expansions/ft_strdup_quotes.c +++ b/srcs/parsing/expansions/ft_strdup_quotes.c @@ -37,7 +37,8 @@ char *ft_strdup_quotes(const char *s) { while (quote_state_change("e_state, &s[i])) i++; - dup[i_dup++] = s[i++]; + if (s[i]) + dup[i_dup++] = s[i++]; } return (dup); } diff --git a/srcs/parsing/parsing.c b/srcs/parsing/parsing.c index b314dc0..975b973 100644 --- a/srcs/parsing/parsing.c +++ b/srcs/parsing/parsing.c @@ -6,7 +6,7 @@ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/10/24 10:52:40 by lperrey #+# #+# */ -/* Updated: 2021/11/13 05:13:40 by lperrey ### ########.fr */ +/* Updated: 2021/11/14 00:35:42 by lperrey ### ########.fr */ /* */ /* ************************************************************************** */ @@ -39,26 +39,6 @@ void save_redirections_words(t_token *t) } } -void ft_free_cmd_arr(t_cmd **cmd_arr) -{ - int i; - - i = 0; - while (cmd_arr[i]) - { - if (cmd_arr[i]->argv) - ft_free_2d_arr(cmd_arr[i]->argv); - if (cmd_arr[i]->fd_in != STDIN_FILENO && cmd_arr[i]->fd_in > 0) - if (close(cmd_arr[i]->fd_in) == -1) - perror("close()"); - if (cmd_arr[i]->fd_out != STDOUT_FILENO && cmd_arr[i]->fd_out > 0) - if (close(cmd_arr[i]->fd_out) == -1) - perror("close()"); - i++; - } - ft_free_2d_arr(cmd_arr); -} - t_cmd **parsing(t_token *token_list) { t_cmd **cmd_arr; diff --git a/srcs/shell_loop.c b/srcs/shell_loop.c index 905d080..683aa32 100644 --- a/srcs/shell_loop.c +++ b/srcs/shell_loop.c @@ -6,7 +6,7 @@ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/10/04 05:59:26 by lperrey #+# #+# */ -/* Updated: 2021/11/08 05:16:48 by lperrey ### ########.fr */ +/* Updated: 2021/11/14 03:59:01 by lperrey ### ########.fr */ /* */ /* ************************************************************************** */ @@ -45,6 +45,8 @@ void shell_loop(t_all *c) // Bien penser à mettre les ptr à NULL aprés free en cas d'erreur (pour ne pas double free si appel à free_exit()) // Exec Pipeline //execute_cmd(c->envp, c->cmd_arr); + ft_free_cmd_arr(c->cmd_arr); + c->cmd_arr = NULL; } else if (!line_input) write(1, "\n", 1);