diff options
| author | nass1pro <nass1pro@gmail.com> | 2020-06-18 14:05:42 +0200 |
|---|---|---|
| committer | nass1pro <nass1pro@gmail.com> | 2020-06-18 14:05:42 +0200 |
| commit | 1e53dcdbd4f94a11a6d23687bc518fdd8aee0bd9 (patch) | |
| tree | 64c9fdfb2f9d055404d72160e9d0f679809e7426 /src/eval/cmd.c | |
| parent | 70459a3ab97b13df9bf829e29ed91becfba1ea03 (diff) | |
| parent | 52bc3c1a6035dae4e45015c48a8c65681a31512a (diff) | |
| download | minishell-1e53dcdbd4f94a11a6d23687bc518fdd8aee0bd9.tar.gz minishell-1e53dcdbd4f94a11a6d23687bc518fdd8aee0bd9.tar.bz2 minishell-1e53dcdbd4f94a11a6d23687bc518fdd8aee0bd9.zip | |
Merge branch 'master' into parse_cmd
Diffstat (limited to 'src/eval/cmd.c')
| -rw-r--r-- | src/eval/cmd.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/eval/cmd.c b/src/eval/cmd.c index 9468cb2..f502984 100644 --- a/src/eval/cmd.c +++ b/src/eval/cmd.c @@ -6,7 +6,7 @@ /* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/14 10:41:31 by charles #+# #+# */ -/* Updated: 2020/06/15 11:09:38 by charles ### ########.fr */ +/* Updated: 2020/06/17 17:02:07 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,8 +21,7 @@ */ int fork_wrap( - int fd_in, - int fd_out, + int fds[2], void *passed, int (*wrapped)(void *param)) { @@ -33,14 +32,16 @@ int fork_wrap( return (-1); if (child_pid == 0) { - if ((fd_in != MS_NO_FD && dup2(fd_in, STDIN_FILENO) == -1) || - (fd_out != MS_NO_FD && dup2(fd_out, STDOUT_FILENO) == -1)) + if ((fds[FDS_READ] != MS_NO_FD && dup2(fds[FDS_READ], STDIN_FILENO) == -1) || + (fds[FDS_WRITE] != MS_NO_FD && dup2(fds[FDS_WRITE], STDOUT_FILENO) == -1)) exit(EXIT_FAILURE); if ((status = wrapped(passed)) == -1) exit(EXIT_FAILURE); exit(status); } wait(&child_pid); + close(fds[FDS_WRITE]); + // also read end? return (WEXITSTATUS(child_pid)); } @@ -56,16 +57,12 @@ int forked_cmd(void *void_param) return (execve(param->exec_path, param->argv, (char**)param->env->data)); } -int eval_cmd(t_env env, t_path path, t_ast *ast) +int eval_cmd(int fds[2], t_env env, t_path path, t_ast *ast) { t_fork_param_cmd param; - int fd_in; - int fd_out; char **argv; - fd_in = MS_NO_FD; - fd_out = MS_NO_FD; - if (!redir_extract(ast->redirs, env, &fd_in, &fd_out)) + if (!redir_extract(ast->redirs, env, fds)) { ast->redirs = NULL; return (-1); @@ -92,7 +89,7 @@ int eval_cmd(t_env env, t_path path, t_ast *ast) param.argv = argv; param.env = env; - int ret = fork_wrap(fd_in, fd_out, ¶m, &forked_cmd); + int ret = fork_wrap(fds, ¶m, &forked_cmd); ft_split_destroy(argv); return (ret); } |
