pipes done

This commit is contained in:
Jack Halford 2017-02-21 22:42:13 +01:00
parent ec79b05131
commit 8084ffb6a1
19 changed files with 66 additions and 101 deletions

View file

@ -82,7 +82,6 @@ exec/loop_del.c\
exec/loop_exec.c\ exec/loop_exec.c\
exec/process_redirect.c\ exec/process_redirect.c\
exec/process_reset.c\ exec/process_reset.c\
exec/process_resetfds.c\
exec/process_setexec.c\ exec/process_setexec.c\
exec/process_setgroup.c\ exec/process_setgroup.c\
exec/process_setsig.c\ exec/process_setsig.c\

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/27 20:29:56 by jhalford #+# #+# */ /* Created: 2016/11/27 20:29:56 by jhalford #+# #+# */
/* Updated: 2017/02/20 20:20:15 by ariard ### ########.fr */ /* Updated: 2017/02/21 21:41:18 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -21,19 +21,17 @@
# define PROCESS_SCRIPT (1 << 2) # define PROCESS_SCRIPT (1 << 2)
# define PROCESS_SUBSHELL (1 << 3) # define PROCESS_SUBSHELL (1 << 3)
# define PROCESS_UNKNOWN (1 << 4) # define PROCESS_UNKNOWN (1 << 4)
# define PROCESS_PIPESTART (1 << 5) # define PROCESS_COMPLETED (1 << 5)
# define PROCESS_PIPEEND (1 << 6) # define PROCESS_SUSPENDED (1 << 6)
# define PROCESS_COMPLETED (1 << 7) # define PROCESS_RUNNING (1 << 7)
# define PROCESS_SUSPENDED (1 << 8) # define PROCESS_CONTINUED (1 << 8)
# define PROCESS_RUNNING (1 << 9)
# define PROCESS_CONTINUED (1 << 10)
# define PROCESS_TYPE_MASK (1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4) # define PROCESS_TYPE_MASK (1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4)
# define PROCESS_STATE_MASK (1 << 7 | 1 << 8 | 1 << 9 | 1 << 10) # define PROCESS_STATE_MASK (1 << 5 | 1 << 6 | 1 << 7 | 1 << 8)
# define IS_PIPESTART(a) (a & PROCESS_PIPESTART) # define IS_PIPESTART(p) (p->fdin == STDIN)
# define IS_PIPEEND(a) (a & PROCESS_PIPEEND) # define IS_PIPEEND(p) (p->fdout == STDOUT)
# define IS_PIPESINGLE(a) ((a & PROCESS_PIPESTART) && (a & PROCESS_PIPEEND)) # define IS_PIPESINGLE(p) (IS_PIPESTART(p) && IS_PIPEEND(p))
# define SCRIPT_LOOP (1 << 0) # define SCRIPT_LOOP (1 << 0)
@ -49,8 +47,9 @@ struct s_process
pid_t pid; pid_t pid;
int fdin; int fdin;
int fdout; int fdout;
int pipe_count;
int to_close;
t_list *redirs; t_list *redirs;
int toclose;
int status; int status;
t_flag attributes; t_flag attributes;
t_flag script; t_flag script;
@ -96,7 +95,7 @@ int exec_pipe(t_btree **ast);
int exec_redir(t_btree **ast); int exec_redir(t_btree **ast);
int exec_command(t_btree **ast); int exec_command(t_btree **ast);
int exec_while(t_btree **ast); int exec_while(t_btree **ast);
int exec_if(t_btree **ast); int exec_if(t_btree **ast);
int exec_elif(t_btree **ast); int exec_elif(t_btree **ast);
int exec_else(t_btree **ast); int exec_else(t_btree **ast);

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/01 12:15:50 by jhalford #+# #+# */ /* Created: 2016/12/01 12:15:50 by jhalford #+# #+# */
/* Updated: 2017/02/20 22:26:26 by jhalford ### ########.fr */ /* Updated: 2017/02/21 22:39:19 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */ /* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/13 13:09:57 by jhalford #+# #+# */ /* Created: 2016/12/13 13:09:57 by jhalford #+# #+# */
/* Updated: 2017/02/20 20:30:54 by ariard ### ########.fr */ /* Updated: 2017/02/21 22:40:59 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -36,7 +36,9 @@ t_execf *is_builtin(t_process *p)
i = -1; i = -1;
while (g_builtin[++i].name) while (g_builtin[++i].name)
{
if (ft_strcmp(g_builtin[i].name, p->av[0]) == 0) if (ft_strcmp(g_builtin[i].name, p->av[0]) == 0)
return (g_builtin[i].f); return (g_builtin[i].f);
}
return (NULL); return (NULL);
} }

View file

@ -6,7 +6,7 @@
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */ /* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/14 17:28:14 by jhalford #+# #+# */ /* Created: 2016/11/14 17:28:14 by jhalford #+# #+# */
/* Updated: 2017/02/20 22:43:53 by jhalford ### ########.fr */ /* Updated: 2017/02/21 22:41:01 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -48,16 +48,28 @@ int exec_command(t_btree **ast)
t_astnode *node; t_astnode *node;
t_process *p; t_process *p;
t_job *job; t_job *job;
int fds[2];
node = (*ast)->item; node = (*ast)->item;
p = &data_singleton()->exec.process; p = &data_singleton()->exec.process;
job = &data_singleton()->exec.job; job = &data_singleton()->exec.job;
p->av = token_to_argv(node); if (!(p->av = token_to_argv(node)))
{
DG("globbing error");
return (1);
}
process_setexec(node->type, p); process_setexec(node->type, p);
if (p->pipe_count)
{
pipe(fds);
p->fdout = fds[PIPE_WRITE];
p->to_close = fds[PIPE_READ];
p->pipe_count--;
}
if (!(launch_process(p))) if (!(launch_process(p)))
{ {
job_addprocess(p); job_addprocess(p);
if (IS_PIPEEND(p->attributes)) if (IS_PIPEEND(p))
{ {
JOB_IS_FG(job->attributes) ? JOB_IS_FG(job->attributes) ?
put_job_in_foreground(job, 0): put_job_in_foreground(job, 0):
@ -65,6 +77,8 @@ int exec_command(t_btree **ast)
job->pgid = 0; job->pgid = 0;
} }
} }
if (p->fdout == fds[PIPE_WRITE])
p->fdin = fds[PIPE_READ];
process_reset(p); process_reset(p);
// btree_delone(ast, &ast_free); // btree_delone(ast, &ast_free);
return (0); return (0);

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/27 21:13:23 by jhalford #+# #+# */ /* Created: 2016/11/27 21:13:23 by jhalford #+# #+# */
/* Updated: 2017/02/20 20:32:52 by ariard ### ########.fr */ /* Updated: 2017/02/21 21:47:43 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,36 +14,15 @@
int exec_pipe(t_btree **ast) int exec_pipe(t_btree **ast)
{ {
int fds[2];
int start;
t_data *data; t_data *data;
t_process *p; t_process *p;
DG("exec pipe");
data = data_singleton(); data = data_singleton();
p = &data_singleton()->exec.process; p = &data->exec.process;
pipe(fds); p->pipe_count++;
/* DG("pipe %i->%i", fds[PIPE_WRITE], fds[PIPE_READ]); */
p->fdout = fds[PIPE_WRITE];
start = IS_PIPESTART(p->attributes);
p->toclose = fds[PIPE_READ];
p->attributes &= ~PROCESS_PIPEEND;
ft_exec(&(*ast)->left); ft_exec(&(*ast)->left);
p->attributes &= ~PROCESS_PIPESTART;
p->toclose = STDIN;
close(fds[PIPE_WRITE]);
p->fdout = STDOUT;
p->fdin = fds[PIPE_READ];
p->attributes |= PROCESS_PIPEEND;
ft_exec(&(*ast)->right); ft_exec(&(*ast)->right);
if (start) /* btree_delone(ast, &ast_free); */
p->attributes |= PROCESS_PIPESTART;
close(fds[PIPE_READ]);
p->fdin = STDIN;
btree_delone(ast, &ast_free);
return (0); return (0);
} }

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/27 20:30:32 by jhalford #+# #+# */ /* Created: 2016/11/27 20:30:32 by jhalford #+# #+# */
/* Updated: 2017/02/21 18:15:31 by ariard ### ########.fr */ /* Updated: 2017/02/21 21:37:58 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -49,8 +49,8 @@ int ft_exec(t_btree **ast)
{ {
if (item->type == g_execmap[i].type) if (item->type == g_execmap[i].type)
{ {
DG("match : %s and %s", /* DG("match : %s and %s", */
read_state(item->type), read_state(g_execmap[i].type)); /* read_state(item->type), read_state(g_execmap[i].type)); */
/* return ((*g_execmap[i].f)(ast)); */ /* return ((*g_execmap[i].f)(ast)); */
(*g_execmap[i].f)(ast); (*g_execmap[i].f)(ast);
} }

View file

@ -6,7 +6,7 @@
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */ /* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/13 14:20:45 by jhalford #+# #+# */ /* Created: 2016/12/13 14:20:45 by jhalford #+# #+# */
/* Updated: 2017/02/21 20:09:54 by jhalford ### ########.fr */ /* Updated: 2017/02/21 21:39:15 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -23,7 +23,7 @@ int launch_process(t_process *p)
ft_dprintf(2, "{red}%s: command not found: %s{eoc}\n", SHELL_NAME, p->av[0]); ft_dprintf(2, "{red}%s: command not found: %s{eoc}\n", SHELL_NAME, p->av[0]);
set_exitstatus(127, 1); set_exitstatus(127, 1);
} }
else if (p->attributes & PROCESS_BUILTIN && IS_PIPESINGLE(p->attributes)) else if (p->attributes & PROCESS_BUILTIN && IS_PIPESINGLE(p))
{ {
if (process_redirect(p)) if (process_redirect(p))
return (1); return (1);

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/29 16:04:18 by jhalford #+# #+# */ /* Created: 2016/11/29 16:04:18 by jhalford #+# #+# */
/* Updated: 2017/02/07 17:36:46 by jhalford ### ########.fr */ /* Updated: 2017/02/21 21:44:23 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -48,12 +48,11 @@ int process_redirect(t_process *p)
} }
redirs = redirs->next; redirs = redirs->next;
} }
if (p->toclose != STDIN) if (p->to_close != 0)
close(p->toclose); close(p->to_close);
if (p->fdin != STDIN) if (p->fdin != STDIN)
dup2_close(p->fdin, STDIN); dup2_close(p->fdout, STDOUT);
if (p->fdout != STDOUT) if (p->fdout != STDOUT)
dup2_close(p->fdout, STDOUT); dup2_close(p->fdout, STDOUT);
ft_lstdel(&p->redirs, ft_lst_cfree);
return (0); return (0);
} }

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/02/07 17:44:22 by jhalford #+# #+# */ /* Created: 2017/02/07 17:44:22 by jhalford #+# #+# */
/* Updated: 2017/02/07 17:48:22 by jhalford ### ########.fr */ /* Updated: 2017/02/21 21:42:40 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,7 +14,8 @@
void process_reset(t_process *p) void process_reset(t_process *p)
{ {
process_resetfds(); p->fdout = STDOUT;
p->to_close = 0;
p->av = NULL; p->av = NULL;
p->pid = 0; p->pid = 0;
p->redirs = NULL; p->redirs = NULL;

View file

@ -1,23 +0,0 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* process_resetfds.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2017/02/07 17:39:14 by jhalford #+# #+# */
/* Updated: 2017/02/07 17:50:52 by jhalford ### ########.fr */
/* */
/* ************************************************************************** */
#include "minishell.h"
void process_resetfds(void)
{
t_exec *exec;
exec = &data_singleton()->exec;
dup2(exec->fd0save, 0);
dup2(exec->fd1save, 1);
dup2(exec->fd2save, 2);
}

View file

@ -6,7 +6,7 @@
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */ /* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/13 17:07:10 by jhalford #+# #+# */ /* Created: 2016/12/13 17:07:10 by jhalford #+# #+# */
/* Updated: 2017/02/20 20:42:02 by ariard ### ########.fr */ /* Updated: 2017/02/21 22:41:44 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/13 13:54:51 by jhalford #+# #+# */ /* Created: 2016/12/13 13:54:51 by jhalford #+# #+# */
/* Updated: 2017/01/31 15:07:16 by jhalford ### ########.fr */ /* Updated: 2017/02/21 21:42:53 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -19,7 +19,7 @@ int job_addprocess(t_process *p)
jobc = &data_singleton()->jobc; jobc = &data_singleton()->jobc;
job = &data_singleton()->exec.job; job = &data_singleton()->exec.job;
if (IS_PIPESTART(p->attributes)) if (IS_PIPESTART(p))
{ {
job_update_id(); job_update_id();
job->id = jobc->current_id; job->id = jobc->current_id;
@ -31,7 +31,7 @@ int job_addprocess(t_process *p)
{ {
ft_lsteadd(&job->first_process, ft_lstnew(p, sizeof(*p))); ft_lsteadd(&job->first_process, ft_lstnew(p, sizeof(*p)));
} }
if (JOB_IS_BG(job->attributes) && IS_PIPEEND(p->attributes)) if (JOB_IS_BG(job->attributes) && IS_PIPEEND(p))
job_notify_new(job); job_notify_new(job);
return (0); return (0);
} }

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/03 11:58:44 by jhalford #+# #+# */ /* Created: 2016/12/03 11:58:44 by jhalford #+# #+# */
/* Updated: 2017/02/20 20:52:10 by ariard ### ########.fr */ /* Updated: 2017/02/21 22:14:48 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */ /* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/02/09 17:08:51 by jhalford #+# #+# */ /* Created: 2017/02/09 17:08:51 by jhalford #+# #+# */
/* Updated: 2017/02/20 21:55:26 by jhalford ### ########.fr */ /* Updated: 2017/02/21 22:14:51 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */ /* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/15 14:19:48 by gwojda #+# #+# */ /* Created: 2016/12/15 14:19:48 by gwojda #+# #+# */
/* Updated: 2017/02/21 20:04:31 by jhalford ### ########.fr */ /* Updated: 2017/02/21 20:30:45 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View file

@ -6,7 +6,7 @@
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */ /* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/28 19:26:32 by jhalford #+# #+# */ /* Created: 2016/11/28 19:26:32 by jhalford #+# #+# */
/* Updated: 2017/02/20 20:57:14 by ariard ### ########.fr */ /* Updated: 2017/02/21 22:41:46 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -26,12 +26,13 @@ int data_init(void)
data->exec.process.path = NULL; data->exec.process.path = NULL;
data->exec.process.av = NULL; data->exec.process.av = NULL;
data->exec.process.toclose = STDIN; data->exec.process.to_close = 0;
data->exec.process.fdin = STDIN; data->exec.process.fdin = STDIN;
data->exec.process.fdout = STDOUT; data->exec.process.fdout = STDOUT;
data->exec.process.pid = 0; data->exec.process.pid = 0;
data->exec.process.attributes = PROCESS_PIPESTART | PROCESS_PIPEEND; data->exec.process.attributes = 0;
data->exec.process.redirs = NULL; data->exec.process.redirs = NULL;
data->exec.process.pipe_count = 0;
data->exec.fd0save = fcntl(0, F_DUPFD_CLOEXEC); data->exec.fd0save = fcntl(0, F_DUPFD_CLOEXEC);
data->exec.fd1save = fcntl(1, F_DUPFD_CLOEXEC); data->exec.fd1save = fcntl(1, F_DUPFD_CLOEXEC);
data->exec.fd2save = fcntl(2, F_DUPFD_CLOEXEC); data->exec.fd2save = fcntl(2, F_DUPFD_CLOEXEC);

View file

@ -6,7 +6,7 @@
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */ /* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */ /* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
/* Updated: 2017/02/21 20:07:27 by jhalford ### ########.fr */ /* Updated: 2017/02/21 20:32:39 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -26,18 +26,14 @@ int handle_instruction(int fd)
parser_init(&parser); parser_init(&parser);
token = NULL; token = NULL;
ast = NULL; ast = NULL;
/* str = NULL; */
DG("START: state=%i", parser.state);
while (1) while (1)
{ {
if ((ret = readline(fd, get_lexer_stack(lexer), &str))) if ((ret = readline(fd, get_lexer_stack(lexer), &str)))
{ {
DG("ret=%i, str=%s, state=%i", ret, str, parser.state);
if (ret == -1) if (ret == -1)
return (-1); return (-1);
return (parser.state == UNDEFINED ? error_EOF() : 1); return (parser.state == UNDEFINED ? error_EOF() : 1);
} }
DG("ret=%i, str=%s", ret, str);
ft_strappend(&lexer.str, str); ft_strappend(&lexer.str, str);
if (get_lexer_stack(lexer) == BACKSLASH) if (get_lexer_stack(lexer) == BACKSLASH)
pop(&lexer.stack); pop(&lexer.stack);
@ -46,22 +42,20 @@ int handle_instruction(int fd)
ltoken = ft_lstlast(token); ltoken = ft_lstlast(token);
if (lexer_lex(token ? &ltoken : &token, &lexer)) if (lexer_lex(token ? &ltoken : &token, &lexer))
return (1); return (1);
//token_print(token);
if (get_lexer_stack(lexer)) if (get_lexer_stack(lexer))
continue ; continue ;
if (ft_parse(&ast, &token, &parser)) if (ft_parse(&ast, &token, &parser))
continue ; continue ;
DG("AFTER PARSING: state=%i", parser.state);
if (parser.state == SUCCESS) if (parser.state == SUCCESS)
break ; break ;
else if (parser.state == ERROR) else if (parser.state == ERROR)
return (error_syntax(&token)); return (error_syntax(&token));
} }
DG("succesful parsing:"); DG("Before execution:");
btree_print(STDBUG, ast, &ft_putast); btree_print(STDBUG, ast, &ft_putast);
/* if (ft_exec(&ast)) */
/* return (1); */
ft_add_str_in_history(lexer.str); ft_add_str_in_history(lexer.str);
if (ft_exec(&ast))
return (1);
return (0); return (0);
} }

View file

@ -6,7 +6,7 @@
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */ /* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2017/02/15 20:49:15 by ariard #+# #+# */ /* Created: 2017/02/15 20:49:15 by ariard #+# #+# */
/* Updated: 2017/02/20 22:27:06 by jhalford ### ########.fr */ /* Updated: 2017/02/21 22:40:29 by jhalford ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */