diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2020-09-16 20:25:08 +0200 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2020-09-16 20:25:08 +0200 |
| commit | 46c7f91cdceef0d5dd801ac569fb5d0c76b711aa (patch) | |
| tree | 3280c238a009d38896d3caa6c92601817d54ef87 /src | |
| parent | 3bb997212b3a0d140a34932f9deff52793673d49 (diff) | |
| download | minishell-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.c | 3 | ||||
| -rw-r--r-- | src/lexer/lexer.c | 16 | ||||
| -rw-r--r-- | src/lexer/trim.c | 2 | ||||
| -rw-r--r-- | src/lexer/utils.c | 2 | ||||
| -rw-r--r-- | src/main.c | 16 | ||||
| -rw-r--r-- | src/parser/parser.c | 12 | ||||
| -rw-r--r-- | src/path.c | 3 | ||||
| -rw-r--r-- | src/preprocess.c | 22 |
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 */ /* */ /* ************************************************************************** */ @@ -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) @@ -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) |
