diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ast.c | 4 | ||||
| -rw-r--r-- | src/eval/cmd.c | 9 | ||||
| -rw-r--r-- | src/eval/parenthesis.c | 3 | ||||
| -rw-r--r-- | src/main.c | 4 | ||||
| -rw-r--r-- | src/parser/parser.c | 15 | ||||
| -rw-r--r-- | src/preprocess.c | 4 |
6 files changed, 23 insertions, 16 deletions
@@ -6,7 +6,7 @@ /* By: charles <charles@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/01 17:05:42 by charles #+# #+# */ -/* Updated: 2020/10/06 09:58:35 by cacharle ### ########.fr */ +/* Updated: 2020/10/07 15:56:19 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -31,8 +31,6 @@ t_ast *ast_new(enum e_ast tag) return (NULL); ast->tag = tag; ast->redirs = NULL; - ast->op.left = NULL; - ast->op.right = NULL; ast->cmd_argv = NULL; return (ast); } diff --git a/src/eval/cmd.c b/src/eval/cmd.c index 8c08b78..242c7a5 100644 --- a/src/eval/cmd.c +++ b/src/eval/cmd.c @@ -6,7 +6,7 @@ /* By: charles <charles@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/14 10:41:31 by charles #+# #+# */ -/* Updated: 2020/10/06 17:18:20 by cacharle ### ########.fr */ +/* Updated: 2020/10/07 18:12:00 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -40,12 +40,17 @@ int eval_cmd(int fds[2], t_env env, t_ast *ast) return (status); if ((argv = preprocess(&ast->cmd_argv, env)) == NULL) return (EVAL_FATAL); + /* printf("%p\n", ast->cmd_argv); */ /* ast->cmd_argv = NULL; */ if (argv[0] == NULL) return (0); param.builtin = builtin_search_func(argv[0]); if (param.builtin != NULL && !param.builtin->forked) - return (param.builtin->func(argv, env)); + { + status = param.builtin->func(argv, env); + ft_split_destroy(argv); + return (status); + } if (param.builtin == NULL && (status = path_search(env, argv[0], param.exec_path, true)) != 0) diff --git a/src/eval/parenthesis.c b/src/eval/parenthesis.c index 5a1fafa..6f4f9e0 100644 --- a/src/eval/parenthesis.c +++ b/src/eval/parenthesis.c @@ -6,7 +6,7 @@ /* By: charles <me@cacharle.xyz> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/09/13 20:38:29 by charles #+# #+# */ -/* Updated: 2020/10/06 17:22:29 by cacharle ### ########.fr */ +/* Updated: 2020/10/07 15:56:09 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,7 +24,6 @@ int eval_parenthesis(int fds[2], t_env env, t_ast *ast) if ((status = redir_extract(&ast->redirs, env, fds)) != 0) return (status); - ast->tag ^= AST_PARENT; param.fds[0] = fds[0]; param.fds[1] = fds[1]; param.env = env; @@ -6,7 +6,7 @@ /* By: cacharle <cacharle@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/28 11:45:44 by cacharle #+# #+# */ -/* Updated: 2020/10/07 14:56:19 by cacharle ### ########.fr */ +/* Updated: 2020/10/07 16:01:29 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -47,7 +47,7 @@ int execute(t_env env, char *input) fds[0] = FD_NONE; fds[1] = FD_NONE; status = eval(fds, env, parser_out->ast); - /* ast_destroy(parser_out->ast); */ + ast_destroy(parser_out->ast); free(parser_out); if (status == EVAL_FATAL) exit(1); diff --git a/src/parser/parser.c b/src/parser/parser.c index 29fdece..6ab82be 100644 --- a/src/parser/parser.c +++ b/src/parser/parser.c @@ -6,7 +6,7 @@ /* By: nahaddac <nahaddac@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/17 18:09:04 by nahaddac #+# #+# */ -/* Updated: 2020/10/07 10:31:26 by cacharle ### ########.fr */ +/* Updated: 2020/10/07 16:43:08 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -71,6 +71,7 @@ t_parsed *parse_cmd(t_tok_lst *input) if (tmp == NULL || tmp->syntax_error) return (tmp); input = tmp->rest; + free(tmp); } else break; @@ -90,7 +91,8 @@ t_parsed *parse_pipeline(t_tok_lst *input) return (expr); if (expr->rest->next == NULL) return (parsed_error("syntax error expected token\n")); - tail = parse_pipeline(expr->rest->next); + ft_lstpop_front(&expr->rest, free); + tail = parse_pipeline(expr->rest); if (tail == NULL || tail->syntax_error) return (tail); expr_ast = expr->ast; @@ -114,7 +116,8 @@ t_parsed *parse_pipeline(t_tok_lst *input) /* ft_lstdestroy(&tail, NULL); */ return (NULL); } - return (parsed_new(pipeline_ast, tail->rest)); + tail->ast = pipeline_ast; + return (tail); } /* @@ -170,12 +173,13 @@ t_parsed *parse_expr(t_tok_lst *input) if (input->tag & TAG_PARENT_OPEN) { - if (!(parsed = parse_op(input->next)) || parsed->syntax_error) + ft_lstpop_front(&input, free); + if (!(parsed = parse_op(input)) || parsed->syntax_error) return (parsed); input = parsed->rest; if (input == NULL || !(input->tag & TAG_PARENT_CLOSE)) return (parsed_error("syntax error expected token\n")); - input = input->next; + ft_lstpop_front(&input, free); if ((ast = ast_new(AST_PARENT)) == NULL) return (NULL); ast->parent_ast = parsed->ast; @@ -185,6 +189,7 @@ t_parsed *parse_expr(t_tok_lst *input) tmp = parse_redir(input, &parsed->ast->redirs); if (tmp == NULL || tmp->syntax_error) return (tmp); + free(tmp); input = tmp->rest; } parsed->rest = input; diff --git a/src/preprocess.c b/src/preprocess.c index 95f2b56..6204dc2 100644 --- a/src/preprocess.c +++ b/src/preprocess.c @@ -6,7 +6,7 @@ /* By: charles <charles@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/03 08:58:49 by charles #+# #+# */ -/* Updated: 2020/10/07 11:12:31 by cacharle ### ########.fr */ +/* Updated: 2020/10/07 16:50:42 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -204,7 +204,7 @@ int preprocess_filename(t_tok_lst **tokens, t_env env, char **filename) ft_split_destroy(strs); return (1); } - *filename = ft_strdup(strs[0]); + *filename = strs[0]; free(strs); return (*filename == NULL ? EVAL_FATAL : 0); } |
