diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2020-10-06 17:07:46 +0200 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2020-10-06 17:07:46 +0200 |
| commit | fc862343cc5d0c305811fe23311084ae3702ed42 (patch) | |
| tree | 6417bd07fd58dab95eea3193acfd5230f0ff57f1 /src/eval | |
| parent | 54394620893f7245c7697a57d724d430d06b57d1 (diff) | |
| download | minishell-fc862343cc5d0c305811fe23311084ae3702ed42.tar.gz minishell-fc862343cc5d0c305811fe23311084ae3702ed42.tar.bz2 minishell-fc862343cc5d0c305811fe23311084ae3702ed42.zip | |
Fixing error status on mac, Fixing parser pipeline segfault, Fixing pipeline not closing read-end
Diffstat (limited to 'src/eval')
| -rw-r--r-- | src/eval/operation.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/eval/operation.c b/src/eval/operation.c index a54b657..d8206b6 100644 --- a/src/eval/operation.c +++ b/src/eval/operation.c @@ -6,7 +6,7 @@ /* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/17 15:27:22 by charles #+# #+# */ -/* Updated: 2020/10/06 15:53:12 by cacharle ### ########.fr */ +/* Updated: 2020/10/06 16:11:54 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -60,12 +60,6 @@ int eval_pipeline(int fds[2], t_env env, t_ast *ast) prev_output = STDIN_FILENO; curr = ast->pipeline; - - // create pipe - // fork - // dup2 pipe write -> stdout - // dup2 prev_output -> stdin - while (curr->next != NULL) { pipe(p); @@ -75,11 +69,18 @@ int eval_pipeline(int fds[2], t_env env, t_ast *ast) { dup2(p[FD_WRITE], STDOUT_FILENO); if (prev_output != STDIN_FILENO) + { dup2(prev_output, STDIN_FILENO); + close(prev_output); + } close(p[FD_READ]); + fds[0] = FD_NONE; + fds[1] = FD_NONE; exit(eval(fds, env, curr->data, NULL, FD_NONE)); } close(p[FD_WRITE]); + if (prev_output != STDIN_FILENO) + close(prev_output); prev_output = p[FD_READ]; curr = curr->next; } @@ -89,10 +90,16 @@ int eval_pipeline(int fds[2], t_env env, t_ast *ast) { /* dup2(p[FD_WRITE], STDOUT_FILENO); */ if (prev_output != STDIN_FILENO) + { dup2(prev_output, STDIN_FILENO); + close(prev_output); + } close(p[FD_WRITE]); + fds[0] = FD_NONE; + fds[1] = FD_NONE; exit(eval(fds, env, curr->data, NULL, FD_NONE)); } + close(p[FD_READ]); while (wait(NULL) != -1) ; |
