diff --git a/42sh/includes/job_control.h b/42sh/includes/job_control.h index 78fabb2c..08eca6df 100644 --- a/42sh/includes/job_control.h +++ b/42sh/includes/job_control.h @@ -38,7 +38,6 @@ struct s_jobc t_list *first_job; pid_t shell_pgid; int current_id; - int rank[2]; struct termios shell_tmodes; }; diff --git a/42sh/src/exec/exec_command.c b/42sh/src/exec/exec_command.c index 67db7916..934d7e03 100644 --- a/42sh/src/exec/exec_command.c +++ b/42sh/src/exec/exec_command.c @@ -34,7 +34,7 @@ int exec_command(t_btree **ast) DG("gonna launch_process now"); launch_process(p); job_addprocess(p); - if (IS_PIPEEND(p->fdout == STDOUT)) + if (IS_PIPEEND(p->attributes)) { if (JOB_IS_FG(job->attributes)) put_job_in_foreground(job, 0); diff --git a/42sh/src/exec/exec_pipe.c b/42sh/src/exec/exec_pipe.c index 6bd51167..41cc9d82 100644 --- a/42sh/src/exec/exec_pipe.c +++ b/42sh/src/exec/exec_pipe.c @@ -24,18 +24,17 @@ int exec_pipe(t_btree **ast) DG("pipe %i->%i", fds[PIPE_WRITE], fds[PIPE_READ]); p->fdout = fds[PIPE_WRITE]; if (!IS_PIPEEND(p->attributes)) - { p->attributes |= PROCESS_PIPESTART; - p->attributes &= ~PROCESS_PIPEEND; - } + else + p->attributes &= ~PROCESS_PIPESTART; + p->attributes &= ~PROCESS_PIPEEND; ft_exec(&(*ast)->left); if (p->fdout != STDOUT) close(p->fdout); p->fdout = STDOUT; p->fdin = fds[PIPE_READ]; - - p->attributes ~= ~PROCESS_PIPESTART; + p->attributes &= ~PROCESS_PIPESTART; p->attributes |= PROCESS_PIPEEND; ft_exec(&(*ast)->right); @@ -43,6 +42,7 @@ int exec_pipe(t_btree **ast) /* close(fds[PIPE_READ]); */ p->fdin = STDIN; p->fdout = STDOUT; + p->attributes |= PROCESS_PIPESTART; p->attributes &= ~PROCESS_PIPEEND; btree_delone(ast, &ast_free); return (0); diff --git a/42sh/src/exec/launch_process.c b/42sh/src/exec/launch_process.c index e27254a1..511659ff 100644 --- a/42sh/src/exec/launch_process.c +++ b/42sh/src/exec/launch_process.c @@ -27,7 +27,7 @@ int launch_process(t_process *p) } else { - DG("process is to be forked, fdout=%i, attr=%x", p->fdout, p->attributes); + DG("process is to be forked, fdout=%i, attr=%b", p->fdout, p->attributes); if (p->attributes & (PROCESS_BINARY | PROCESS_SCRIPT) && access(p->path, X_OK) == -1) { diff --git a/42sh/src/job-control/job_addprocess.c b/42sh/src/job-control/job_addprocess.c index 48d1930e..77455423 100644 --- a/42sh/src/job-control/job_addprocess.c +++ b/42sh/src/job-control/job_addprocess.c @@ -24,7 +24,7 @@ int job_addprocess(t_process *p) job_update_id(); job->id = jobc->current_id; ft_lstadd(&jobc->first_job, ft_lstnew(job, sizeof(*job))); - DG("added new job [%i], rank=%i:%i", job->id, jobc->rank[0], jobc->rank[1]); + DG("added new job [%i]", job->id); } job = jobc->first_job->content; ft_lstadd(&job->first_process, ft_lstnew(p, sizeof(*p))); diff --git a/42sh/src/job-control/job_update_rank.c b/42sh/src/job-control/job_update_rank.c deleted file mode 100644 index 49c8475b..00000000 --- a/42sh/src/job-control/job_update_rank.c +++ /dev/null @@ -1,35 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* job_shiftstatus.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: jhalford +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/12 13:05:10 by jhalford #+# #+# */ -/* Updated: 2016/12/12 17:23:12 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "job_control.h" - -void job_update_rank() -{ - t_jobc *jobc; - t_job *job; - t_list *list; - - jobc = &data_singleton()->jobc; - list = jobc->first_job; - if (list) - { - job = list->content; - jobc->rank[0] = job->id; - jobc->rank[1] = list->next ? ((t_job*)list->next->content)->id : 0; - } - else - { - jobc->rank[0] = 0; - jobc->rank[1] = 0; - } - DG("updated rank: %i,%i", jobc->rank[0], jobc->rank[1]); -} diff --git a/42sh/src/job-control/process_mark_status.c b/42sh/src/job-control/process_mark_status.c index 4c452266..e517c9eb 100644 --- a/42sh/src/job-control/process_mark_status.c +++ b/42sh/src/job-control/process_mark_status.c @@ -17,7 +17,7 @@ int process_mark_status(pid_t pid, int status) t_process *p; DG("marking: pid=%i, status=%i", pid, status); - if (pid > 0) + if (pid > 1) { if ((p = job_getprocess(pid))) { @@ -37,8 +37,5 @@ int process_mark_status(pid_t pid, int status) ft_dprintf(2, "No child process %d.\n", pid); return(-1); } - else - { - return(-1); - } + return(-1); } diff --git a/42sh/src/job-control/put_job_in_foreground.c b/42sh/src/job-control/put_job_in_foreground.c index f34f1572..8e17a06c 100644 --- a/42sh/src/job-control/put_job_in_foreground.c +++ b/42sh/src/job-control/put_job_in_foreground.c @@ -23,7 +23,7 @@ int put_job_in_foreground(t_job *job, int cont) if (cont) { tcsetattr (STDIN_FILENO, TCSADRAIN, &job->tmodes); - if (kill(- job->pgid, SIGCONT) < 0) + if (kill(-job->pgid, SIGCONT) < 0) perror("kill (SIGCONT)"); } /* Wait for it to report. */ diff --git a/42sh/src/line-editing/ft_interactive_sh.c b/42sh/src/line-editing/ft_interactive_sh.c index 2c2d58a9..1c6b4465 100644 --- a/42sh/src/line-editing/ft_interactive_sh.c +++ b/42sh/src/line-editing/ft_interactive_sh.c @@ -47,6 +47,7 @@ int ft_interactive_sh(t_data *data) if ((input_init(data))) return (-1); + DG("interactive_sh loop"); while (1) { ft_bzero(buf, 4); diff --git a/42sh/src/main/data_init.c b/42sh/src/main/data_init.c index b089b8b9..355d591f 100644 --- a/42sh/src/main/data_init.c +++ b/42sh/src/main/data_init.c @@ -26,6 +26,7 @@ int data_init(void) data->exec.process.fdin = STDIN; data->exec.process.fdout = STDOUT; data->exec.process.pid = 0; + data->exec.process.attributes = PROCESS_PIPESTART; data->exec.aol_status = NULL; data->exec.aol_search = 0; data->exec.job.id = 0;