diff --git a/srcs/exec_bonus.c b/srcs/exec_bonus.c index dda3ad2..ee1c0a5 100755 --- a/srcs/exec_bonus.c +++ b/srcs/exec_bonus.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/28 13:50:14 by tomoron #+# #+# */ -/* Updated: 2024/04/19 17:59:31 by tomoron ### ########.fr */ +/* Updated: 2024/04/19 18:49:33 by marde-vr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -61,18 +61,20 @@ void exec_command_bonus(t_msh *msh, char *cmd_str) free_cmd(cmds); return ; } + msh->cmds_head = cmds; while (cmds) { - print_parsed_cmd(cmds); // debug + //print_parsed_cmd(cmds); // debug msh->tokens = parse_cmds_to_token(cmds, msh->env); msh->cmds = cmds; //print_msh_struct(msh); // debug - // print_parsed_token(msh->tokens); // debug + //print_parsed_token(msh->tokens); // debug exec_commands(msh); msh->in_fd = 0; msh->out_fd = 0; cmds = get_next_command(cmds); } + free_cmd(msh->cmds_head); } int exec(t_msh *msh, char **cmd_args, int i, int cmd_count) @@ -180,6 +182,7 @@ void end_execution(t_msh *msh, int cmd_count) print_signaled(status); // TODO: (core dumped) WCOREDUMP free(msh->pids); + free_fds(msh); msh->pids = 0; free(msh->fds); // signal(SIGINT, signal_handler_interactive); //enables ctrl-C @@ -197,7 +200,7 @@ void exec_commands(t_msh *msh) return ; cmd_count = get_cmd_count(msh->cmds); //printf("cmd_count : %d\n", cmd_count); - msh->fds = ft_calloc(cmd_count, sizeof(int **)); + msh->fds = ft_calloc(cmd_count + 1, sizeof(int **)); msh->pids = ft_calloc(cmd_count, sizeof(int *)); if (!msh->pids || !msh->fds) ft_exit(msh, 1); diff --git a/srcs/minishell.h b/srcs/minishell.h index 77db57a..2a38ade 100755 --- a/srcs/minishell.h +++ b/srcs/minishell.h @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/04 17:31:38 by tomoron #+# #+# */ -/* Updated: 2024/04/19 14:09:25 by tomoron ### ########.fr */ +/* Updated: 2024/04/19 18:49:27 by marde-vr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -65,6 +65,7 @@ typedef struct s_msh t_env *env; t_token *tokens; t_cmd *cmds; + t_cmd *cmds_head; int **fds; int *pids; t_cmd_type in_type; @@ -143,6 +144,7 @@ int ft_export(t_msh *msh); int is_input_type(t_cmd *cmd); void free_env(t_env *env); int ft_unset(t_msh *msh); +void free_fds(t_msh *msh); void free_msh(t_msh *msh); void free_msh(t_msh *msh); int echo(t_token *args); diff --git a/srcs/utils.c b/srcs/utils.c index 4b960bb..68a6892 100755 --- a/srcs/utils.c +++ b/srcs/utils.c @@ -6,18 +6,38 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/05 18:19:26 by marde-vr #+# #+# */ -/* Updated: 2024/04/18 20:49:01 by marde-vr ### ########.fr */ +/* Updated: 2024/04/19 18:52:13 by marde-vr ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" +void free_fds(t_msh *msh) +{ + int i; + + if (msh->fds) + { + i = 0; + while (msh->fds[i]) + { + free(msh->fds[i]); + msh->fds[i] = 0; + i++; + } + free(msh->fds); + msh->fds = 0; + } +} + void free_msh(t_msh *msh) { if (msh) { free_env(msh->env); free(msh->pids); + free_cmd(msh->cmds_head); + free_fds(msh); free_token(msh->tokens); set_echoctl(msh->echoctl); free(msh);