Make minishell close file descriptors
authorLukas Jiriste <ljiriste@student.42prague.com>
Thu, 1 Aug 2024 14:08:07 +0000 (16:08 +0200)
committerLukas Jiriste <ljiriste@student.42prague.com>
Fri, 2 Aug 2024 12:37:34 +0000 (14:37 +0200)
File descriptors opened for redirection have to be closed also. This
commit makes minishell close the appropriate file descriptors.

src/execution.c

index 5813b7acc5055dfc195a000bdfe3227a370bbf1b..c8bcd8352a4e4f2d89e8cdb6a79b1f832aa7ad74 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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);