diff options
author | JozanLeClerc <bousset.rudy@gmail.com> | 2020-07-27 18:55:07 +0200 |
---|---|---|
committer | JozanLeClerc <bousset.rudy@gmail.com> | 2020-07-27 18:55:07 +0200 |
commit | 487a66394061f2d14a2fa421302966b5442d643f (patch) | |
tree | 34237d4e9cb85f94bcefd46f399d2224dff3f6b3 /src/ft_e_externs_pipes.c | |
parent | Correct shell prompt (diff) | |
download | 42-minishell-487a66394061f2d14a2fa421302966b5442d643f.tar.gz 42-minishell-487a66394061f2d14a2fa421302966b5442d643f.tar.bz2 42-minishell-487a66394061f2d14a2fa421302966b5442d643f.tar.xz 42-minishell-487a66394061f2d14a2fa421302966b5442d643f.tar.zst 42-minishell-487a66394061f2d14a2fa421302966b5442d643f.zip |
I couldn't see shit
Diffstat (limited to 'src/ft_e_externs_pipes.c')
-rw-r--r-- | src/ft_e_externs_pipes.c | 147 |
1 files changed, 0 insertions, 147 deletions
diff --git a/src/ft_e_externs_pipes.c b/src/ft_e_externs_pipes.c deleted file mode 100644 index c1c57b5..0000000 --- a/src/ft_e_externs_pipes.c +++ /dev/null @@ -1,147 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_e_externs_pipes.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 <sys/wait.h> -#include <libft.h> -#include <stdlib.h> -#include <stdint.h> -#include <unistd.h> -#include <string.h> -#include <errno.h> - -#include "ft_d_define.h" -#include "ft_e_externs_next.h" -#include "ft_f_fail.h" -#include "ft_m_redirs.h" -#include "ft_s_destroy.h" -#include "ft_s_lcom.h" -#include "ft_s_struct.h" - -static void - ft_e_extern_child(const char *fullpath, - t_lcom *ptr, - t_msh *msh) -{ - ft_dup_redirs(ptr, msh); - execve(fullpath, ptr->argv, msh->envp); - /* TODO: handle execve failed */ -} - -static size_t -ft_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); -} - -static void - ft_exec_path(const char *fullpath[], - struct s_lpipes *head, - t_msh *msh) -{ - size_t pipes; - size_t i; - size_t j; - int fd[256][2]; - int pid; - int status; - - /* TODO: norm, error mgmnt */ - pipes = ft_e_get_pipes_count(head); - i = 0; - while (i < pipes) - { - pipe(fd[i]); - i++; - } - i = 0; - while (i <= pipes) - { - if ((pid = fork()) == 0) - { - if (i != 0) - dup2(fd[i - 1][FT_WRITE_END], STDIN_FILENO); - if (i != pipes) - dup2(fd[i][FT_READ_END], STDOUT_FILENO); - j = 0; - while (j < pipes) - { - close(fd[j][FT_WRITE_END]); - close(fd[j][FT_READ_END]); - j++; - } - ft_e_extern_child(fullpath[i], head->one, msh); - } - head = head->next; - i++; - } - i = 0; - while (i < pipes) - { - close(fd[i][FT_WRITE_END]); - close(fd[i][FT_READ_END]); - i++; - } - /* while (wait(&status) != pid) */ - /* ; */ - /* msh->ret = WEXITSTATUS(status); */ - waitpid(pid, &status, 0); - msh->ret = WEXITSTATUS(status); -} - -void - ft_e_externs_pipes(struct s_lpipes *ptr, - t_msh *msh) -{ - struct s_lpipes *head; - struct s_lpipes *rptr; - char **envpath; - char **fullpath; - size_t i; - size_t pipes; - - head = ptr; - rptr = ptr; - pipes = ft_e_get_pipes_count(head); - if (!(fullpath = (char **)malloc((pipes + 2) * sizeof(char *)))) - ft_fail_alloc(msh); - fullpath[pipes + 1] = NULL; - i = 0; - while (rptr != NULL) - { - if (ft_ischarset("/.", rptr->one->com[0])) - { - if (!(fullpath[i] = ft_strdup(rptr->one->com))) - ft_fail_alloc(msh); - } - else if ((envpath = ft_get_env_path(msh)) != NULL) - { - fullpath[i] = ft_search_in_path(rptr->one->com, envpath, msh); - ft_delwords(envpath); - } - /* TODO: deal if not found etc */ - i++; - rptr = rptr->next; - } - i = 0; - ft_exec_path((const char**)fullpath, head, msh); - ft_delwords(fullpath); -} |