aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2020-09-16 20:25:08 +0200
committerCharles Cabergs <me@cacharle.xyz>2020-09-16 20:25:08 +0200
commit46c7f91cdceef0d5dd801ac569fb5d0c76b711aa (patch)
tree3280c238a009d38896d3caa6c92601817d54ef87 /src
parent3bb997212b3a0d140a34932f9deff52793673d49 (diff)
downloadminishell-46c7f91cdceef0d5dd801ac569fb5d0c76b711aa.tar.gz
minishell-46c7f91cdceef0d5dd801ac569fb5d0c76b711aa.tar.bz2
minishell-46c7f91cdceef0d5dd801ac569fb5d0c76b711aa.zip
Fixing memory leaks in preprocess and parser
Diffstat (limited to 'src')
-rw-r--r--src/eval/cmd.c3
-rw-r--r--src/lexer/lexer.c16
-rw-r--r--src/lexer/trim.c2
-rw-r--r--src/lexer/utils.c2
-rw-r--r--src/main.c16
-rw-r--r--src/parser/parser.c12
-rw-r--r--src/path.c3
-rw-r--r--src/preprocess.c22
8 files changed, 49 insertions, 27 deletions
diff --git a/src/eval/cmd.c b/src/eval/cmd.c
index 151d11d..5cabbba 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/09/16 16:27:59 by charles ### ########.fr */
+/* Updated: 2020/09/16 19:39:42 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -40,6 +40,7 @@ int eval_cmd(int fds[2], t_env env, t_ast *ast, pid_t *child_pid, int fd_to_cl
return (status);
if ((argv = preprocess(&ast->cmd_argv, env)) == NULL)
return (EVAL_FATAL);
+ /* ast->cmd_argv = NULL; */
if (argv[0] == NULL)
return (0);
param.builtin = builtin_search_func(argv[0]);
diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c
index 26355fe..7a39373 100644
--- a/src/lexer/lexer.c
+++ b/src/lexer/lexer.c
@@ -6,7 +6,7 @@
/* By: nahaddac <nahaddac@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/07/16 08:18:25 by nahaddac #+# #+# */
-/* Updated: 2020/09/16 16:37:49 by charles ### ########.fr */
+/* Updated: 2020/09/16 20:17:10 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -105,12 +105,22 @@ t_tok_lst *create_token_list(char *input, t_tok_lst **lst)
int lexer(char *input, t_tok_lst **out)
{
int status;
+ t_tok_lst *curr;
if (!input)
return (2);
*out = NULL;
*out = create_token_list(input, out);
status = lexer_trim(*out);
- return status;
-
+ curr = *out;
+ while (curr != NULL)
+ {
+ if (!(curr->tag & TAG_IS_STR))
+ {
+ free(curr->content);
+ curr->content = NULL;
+ }
+ curr = curr->next;
+ }
+ return (status);
}
diff --git a/src/lexer/trim.c b/src/lexer/trim.c
index 34e162a..652a78b 100644
--- a/src/lexer/trim.c
+++ b/src/lexer/trim.c
@@ -6,7 +6,7 @@
/* By: nahaddac <nahaddac@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/07/16 08:18:36 by nahaddac #+# #+# */
-/* Updated: 2020/09/16 16:39:37 by charles ### ########.fr */
+/* Updated: 2020/09/16 20:09:42 by charles ### ########.fr */
/* */
/* ************************************************************************** */
diff --git a/src/lexer/utils.c b/src/lexer/utils.c
index 66b2af7..71bcd94 100644
--- a/src/lexer/utils.c
+++ b/src/lexer/utils.c
@@ -6,7 +6,7 @@
/* By: nahaddac <nahaddac@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/07/16 08:18:15 by nahaddac #+# #+# */
-/* Updated: 2020/09/16 16:37:20 by charles ### ########.fr */
+/* Updated: 2020/09/16 20:07:33 by charles ### ########.fr */
/* */
/* ************************************************************************** */
diff --git a/src/main.c b/src/main.c
index 0c33591..411bd43 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/09/16 16:28:47 by charles ### ########.fr */
+/* Updated: 2020/09/16 19:51:55 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -29,8 +29,6 @@ int debug_lexer(char *input);
** path tricks
*/
-char *g_progname = "minishell";
-
t_state g_state;
int execute(t_env env, char *input)
@@ -49,6 +47,8 @@ int execute(t_env env, char *input)
fds[0] = FD_NONE;
fds[1] = FD_NONE;
status = eval(fds, env, parser_out->ast, NULL, FD_NONE);
+ ast_destroy(parser_out->ast);
+ free(parser_out);
if (status == EVAL_FATAL)
exit(1);
g_state.last_status = status;
@@ -91,7 +91,7 @@ int main(int argc, char **argv, char **envp)
if ((env = env_from_array(envp)) == NULL)
return (1);
setup(argv[0], env);
- g_state.child_pid = 0;
+ /* g_state.child_pid = 0; */
repl(env);
ft_vecdestroy(env, free);
return (g_state.last_status);
@@ -101,6 +101,7 @@ int main(int argc, char **argv, char **envp)
int main(int argc, char **argv, char **envp)
{
+ int status;
t_env env;
if ((env = env_from_array(envp)) == NULL)
@@ -110,9 +111,12 @@ int main(int argc, char **argv, char **envp)
if (argc == 3 && ft_strcmp(argv[1], "-l") == 0)
return (debug_lexer(argv[2]));
if (argc == 3 && ft_strcmp(argv[1], "-c") == 0)
- return (execute(env, argv[2]));
+ {
+ status = execute(env, argv[2]);
+ ft_vecdestroy(env, free);
+ return (status);
+ }
repl(env);
- ft_vecdestroy(env, free);
return (g_state.last_status);
}
diff --git a/src/parser/parser.c b/src/parser/parser.c
index 1a3de7f..ddbbc0b 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/09/13 11:50:11 by charles ### ########.fr */
+/* Updated: 2020/09/16 20:19:05 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -83,7 +83,7 @@ t_parsed *parse_op(t_tok_lst *input)
return (left);
input = left->rest;
if (input == NULL || input->tag & TAG_PARENT_CLOSE)
- return (parsed_new(left->ast, input));
+ return (left);
sep_tag = input->tag;
if (!(sep_tag & TAG_IS_SEP))
return (parsed_error("syntax error near unexpected token `%s'\n", input->content));
@@ -100,7 +100,10 @@ t_parsed *parse_op(t_tok_lst *input)
ast->op.left = left->ast;
ast->op.right = right->ast;
ast->op.sep = sep_tag;
- return (parsed_new(ast, right->rest));
+ free(left);
+ left = parsed_new(ast, right->rest);
+ free(right);
+ return (left);
}
/*
@@ -122,7 +125,8 @@ t_parsed *parse_expr(t_tok_lst *input)
if (input == NULL || !(input->tag & TAG_PARENT_CLOSE))
return (parsed_error("syntax error expected token\n"));
input = input->next;
- ast = ast_new(AST_PARENT);
+ if ((ast = ast_new(AST_PARENT)) == NULL)
+ return (NULL);
ast->parent_ast = parsed->ast;
parsed->ast = ast;
while (input != NULL && input->tag & TAG_IS_REDIR)
diff --git a/src/path.c b/src/path.c
index 4949ba9..f583d00 100644
--- a/src/path.c
+++ b/src/path.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/27 15:51:01 by cacharle #+# #+# */
-/* Updated: 2020/09/15 17:45:44 by charles ### ########.fr */
+/* Updated: 2020/09/16 19:28:34 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -45,6 +45,7 @@ static bool st_dir_search(
ft_strcpy(exec_path, dirname);
ft_strcat(exec_path, "/");
ft_strcat(exec_path, exec_name);
+ closedir(dir);
return (true);
}
}
diff --git a/src/preprocess.c b/src/preprocess.c
index 1379107..3b05e76 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/09/15 18:35:09 by charles ### ########.fr */
+/* Updated: 2020/09/16 19:42:25 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -62,21 +62,23 @@ t_tok_lst *st_stick_tokens(t_tok_lst *tokens)
return (tokens);
}
-char **st_tokens_to_argv(t_tok_lst *tokens)
+char **st_tokens_to_argv(t_tok_lst **tokens)
{
- char **ret;
- size_t i;
+ char **ret;
+ size_t i;
+ t_tok_lst *curr;
- ret = ft_calloc(ft_lstsize((t_ftlst*)tokens) + 1, sizeof(char*));
+ curr = *tokens;
+ ret = ft_calloc(ft_lstsize((t_ftlst*)curr) + 1, sizeof(char*));
if (ret == NULL)
return (NULL);
i = 0;
- while (tokens != NULL)
+ while (curr != NULL)
{
- ret[i++] = tokens->content;
- tokens = tokens->next;
+ ret[i++] = curr->content;
+ curr = curr->next;
}
- tok_lst_destroy(&tokens, NULL);
+ tok_lst_destroy(tokens, NULL);
return (ret);
}
@@ -185,7 +187,7 @@ char **preprocess(t_tok_lst **tokens, t_env env)
curr = curr->next;
}
st_stick_tokens(*tokens);
- return (st_tokens_to_argv(*tokens));
+ return (st_tokens_to_argv(tokens));
}
int preprocess_filename(t_tok_lst **tokens, t_env env, char **filename)