/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* free.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/10/10 23:53:17 by lperrey #+# #+# */ /* Updated: 2021/12/02 00:42:33 by lperrey ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" int exit_free(t_all *c, int exit_status) { free(c->prompt_base); free(c->prompt); ft_lstclear((t_list **)&c->token_list, free); ft_free_2d_arr(environ); ft_free_2d_arr(c->path); free_pipeline(&c->pipeline); //if (c->termios_changed) // tcsetattr(STDIN_FILENO, TCSANOW, &c->ori_termios); rl_clear_history(); exit(exit_status); } void free_pipeline(t_cmd **pipeline_ptr[]) { int i; t_cmd **pipeline; pipeline = *pipeline_ptr; if (!pipeline) return ; close_pipeline_fd(pipeline); i = 0; while (pipeline[i]) { ft_free_2d_arr(pipeline[i]->argv); free(pipeline[i]->path); i++; } ft_free_2d_arr(pipeline); *pipeline_ptr = NULL; } void close_pipeline_fd(t_cmd *pipeline[]) { int i; if (!pipeline) return ; i = 0; while (pipeline[i]) { if (pipeline[i]->fd_in != STDIN_FILENO && pipeline[i]->fd_in > 0) { if (close(pipeline[i]->fd_in) == -1) perror("close()"); pipeline[i]->fd_in = 0; } if (pipeline[i]->fd_out != STDOUT_FILENO && pipeline[i]->fd_out > 0) { if (close(pipeline[i]->fd_out) == -1) perror("close()"); pipeline[i]->fd_out = 0; } i++; } }