From: Lukas Jiriste Date: Thu, 1 Aug 2024 14:08:07 +0000 (+0200) Subject: Make minishell close file descriptors X-Git-Url: https://git.ljiriste.work/?a=commitdiff_plain;h=8a75e5c124406c966997dfa8544ef06bb675b600;p=42%2Fminishell.git Make minishell close file descriptors File descriptors opened for redirection have to be closed also. This commit makes minishell close the appropriate file descriptors. --- diff --git a/src/execution.c b/src/execution.c index 5813b7a..c8bcd83 100644 --- a/src/execution.c +++ b/src/execution.c @@ -6,7 +6,7 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/21 08:57:54 by ljiriste #+# #+# */ -/* Updated: 2024/08/01 15:51:03 by ljiriste ### ########.fr */ +/* Updated: 2024/08/01 16:07:38 by ljiriste ### ########.fr */ /* */ /* ************************************************************************** */ @@ -681,6 +681,7 @@ int dup_redirections(__attribute__((unused)) const t_vec *redirections) { redir = ft_vec_caccess(redirections, i); dup2(redir->from_to_fds[1], redir->from_to_fds[0]); + close(redir->from_to_fds[1]); ++i; } return (0); @@ -742,6 +743,15 @@ int ex_fields(char **fields, t_vec *assignments, const t_vec *redirections, t_ex return (0); } +void close_redirection(void *v_redir) +{ + t_redirection *redir; + + redir = v_redir; + close(redir->from_to_fds[1]); + return ; +} + int ex_simple_command(t_parse_tree_node *simple_command, t_execution_env *env) { t_vec redirections; @@ -756,20 +766,20 @@ int ex_simple_command(t_parse_tree_node *simple_command, t_execution_env *env) fields = expand(simple_command, env); if (!fields || res) { - ft_vec_free(&redirections, NULL); + ft_vec_free(&redirections, close_redirection); ft_vec_free(&assignments, free); return (1); } if (!*fields) { assignments_to_env(&assignments, env); - ft_vec_free(&redirections, NULL); + ft_vec_free(&redirections, close_redirection); ft_vec_free(&assignments, NULL); free_split(fields); return (0); } res = ex_fields(fields, &assignments, &redirections, env); - ft_vec_free(&redirections, NULL); + ft_vec_free(&redirections, close_redirection); ft_vec_free(&assignments, free); free_split(fields); return (res);