aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2020-10-07 18:58:40 +0200
committerCharles Cabergs <me@cacharle.xyz>2020-10-07 18:58:40 +0200
commit80b74c925e5bf0aaed7329d87a5ed9b6a7d57fdb (patch)
treede42b5244dafd7aba7590d81b0e87291d2474987 /src
parent0b031c050e049d7bdab459b48f574e8b0048926d (diff)
downloadminishell-80b74c925e5bf0aaed7329d87a5ed9b6a7d57fdb.tar.gz
minishell-80b74c925e5bf0aaed7329d87a5ed9b6a7d57fdb.tar.bz2
minishell-80b74c925e5bf0aaed7329d87a5ed9b6a7d57fdb.zip
Fixing happy path memory leaks
Diffstat (limited to 'src')
-rw-r--r--src/ast.c4
-rw-r--r--src/eval/cmd.c9
-rw-r--r--src/eval/parenthesis.c3
-rw-r--r--src/main.c4
-rw-r--r--src/parser/parser.c15
-rw-r--r--src/preprocess.c4
6 files changed, 23 insertions, 16 deletions
diff --git a/src/ast.c b/src/ast.c
index 6c1e51b..192c213 100644
--- a/src/ast.c
+++ b/src/ast.c
@@ -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;
diff --git a/src/main.c b/src/main.c
index 897ca05..05fc0be 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);
}