diff options
author | JozanLeClerc <bousset.rudy@gmail.com> | 2020-09-30 20:30:51 +0200 |
---|---|---|
committer | JozanLeClerc <bousset.rudy@gmail.com> | 2020-09-30 20:30:51 +0200 |
commit | 0d3dac97491e8c6e1f5455a43803591817fdbf72 (patch) | |
tree | 5c6adf1c3dfcc6a359aba7ab90915315356eda88 /src/e_pipes_next.c | |
parent | Pipes restructuration in progress (diff) | |
download | 42-minishell-0d3dac97491e8c6e1f5455a43803591817fdbf72.tar.gz 42-minishell-0d3dac97491e8c6e1f5455a43803591817fdbf72.tar.bz2 42-minishell-0d3dac97491e8c6e1f5455a43803591817fdbf72.tar.xz 42-minishell-0d3dac97491e8c6e1f5455a43803591817fdbf72.tar.zst 42-minishell-0d3dac97491e8c6e1f5455a43803591817fdbf72.zip |
Normed e_pipes
Diffstat (limited to 'src/e_pipes_next.c')
-rw-r--r-- | src/e_pipes_next.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/e_pipes_next.c b/src/e_pipes_next.c new file mode 100644 index 0000000..b3482c3 --- /dev/null +++ b/src/e_pipes_next.c @@ -0,0 +1,77 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* e_pipes_next.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */ +/* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include <libft.h> +#include <stdlib.h> +#include <stdint.h> +#include <unistd.h> + +#include "e_redirs.h" +#include "s_destroy.h" +#include "s_line.h" +#include "s_lpipes.h" +#include "s_struct.h" +#include "u_utils.h" +#include "u_utils.h" + +/* +** TODO: handle execve failed +*/ + +void e_pipe_child(char *fullpath[], uint8_t pipe_id, t_com *ptr, t_msh *msh) +{ + uint8_t bu_id; + uint8_t ret; + + e_dup_redirs(ptr, msh); + if (ft_strncmp(fullpath[pipe_id], "builtin", 8) == 0) + { + bu_id = u_get_builtin_id(ptr->bin); + ret = msh->bu_ptr[bu_id](ptr->argv + 1, msh); + u_eof_fd(msh->fd); + s_lpipes_clear(&msh->pipes); + s_line_clear(&msh->curr); + s_destroy(msh); + ft_delwords(fullpath); + exit(ret); + } + else + execve(fullpath[pipe_id], ptr->argv, msh->envp); +} + +size_t e_get_pipes_count(struct s_lpipes *ptr) +{ + struct s_lpipes *rptr; + size_t pipes; + + rptr = ptr; + pipes = 0; + while (rptr->next != NULL) + { + rptr = rptr->next; + pipes++; + } + return (pipes); +} + +void e_close_unused_fds(int32_t fd[256][2], size_t pipes) +{ + size_t i; + + i = 0; + while (i < pipes && i < 255) + { + close(fd[i][E_WRITE_END]); + close(fd[i][E_READ_END]); + i++; + } +} |