From 0dbba0e11483fd77a454df5eabfa59638514a952 Mon Sep 17 00:00:00 2001 From: wescande Date: Tue, 28 Mar 2017 16:02:16 +0200 Subject: [PATCH] rectif leaks sample + rectif bquote --- 42sh/src/exec/process_launch.c | 6 +++--- 42sh/src/line_editing/readline.c | 3 ++- 42sh/src/main/main.c | 26 ++++++++++++++++++-------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/42sh/src/exec/process_launch.c b/42sh/src/exec/process_launch.c index 9e82b20b..9ea29b09 100644 --- a/42sh/src/exec/process_launch.c +++ b/42sh/src/exec/process_launch.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/13 22:21:19 by jhalford #+# #+# */ -/* Updated: 2017/03/27 16:46:26 by jhalford ### ########.fr */ +/* Updated: 2017/03/28 15:36:13 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,12 +16,12 @@ int process_fork(t_process *p) { pid_t pid; - if (!p) - return (0); if ((pid = fork()) == -1) exit(SH_ERR("fork(): %s", strerror(errno))); else if (pid != 0) return (pid); + if (!p) + return (0); exec_destroy(&data_singleton()->exec); jobc_destroy(&data_singleton()->jobc); if ((pid = 1) && process_redirect(p) == 0) diff --git a/42sh/src/line_editing/readline.c b/42sh/src/line_editing/readline.c index c88c7dfe..4e3170a8 100644 --- a/42sh/src/line_editing/readline.c +++ b/42sh/src/line_editing/readline.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/15 14:19:48 by gwojda #+# #+# */ -/* Updated: 2017/03/27 18:10:21 by gwojda ### ########.fr */ +/* Updated: 2017/03/28 14:57:13 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,6 +20,7 @@ int readline(int has_prompt, char **input) data_singleton()->line.prompt_size = 1; if (!SH_IS_INTERACTIVE(data_singleton()->opts)) { + ft_strdel(input); if ((ret = get_next_line(data_singleton()->fd, input)) >= 0) return (!ret); return (ret); diff --git a/42sh/src/main/main.c b/42sh/src/main/main.c index aa624bd2..b4d0e4cd 100644 --- a/42sh/src/main/main.c +++ b/42sh/src/main/main.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/20 14:45:40 by gwojda #+# #+# */ -/* Updated: 2017/03/27 20:57:57 by ariard ### ########.fr */ +/* Updated: 2017/03/28 16:00:36 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -32,6 +32,22 @@ static int do_readline_routine(char **stream) return (ret); } +static int exec_instruction(t_btree **ast, char **stream) +{ + t_data *data; + + data = data_singleton(); + if (SH_IS_INTERACTIVE(data->opts) && data->lexer.str) + ft_add_str_in_history(data->lexer.str); + else + ft_strdel(stream); + if (data->parser.state == SUCCESS && ft_exec(ast) < 0) + exit(1); + else if (data->parser.state != SUCCESS) + set_exitstatus(1, 1); + return (0); +} + static int handle_instruction(t_list **token, t_btree **ast) { int ret; @@ -52,13 +68,7 @@ static int handle_instruction(t_list **token, t_btree **ast) else if (ret > 0) break ; } - if (SH_IS_INTERACTIVE(data->opts) && data->lexer.str) - ft_add_str_in_history(data->lexer.str); - if (data->parser.state == SUCCESS && ft_exec(ast) < 0) - exit(1); - else if (data->parser.state != SUCCESS) - set_exitstatus(1, 1); - return (0); + return (exec_instruction(ast, &stream)); } int main(int ac, char **av, char **env)