diff --git a/includes/minishell.h b/includes/minishell.h index 81ee1ea..207b872 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -13,7 +13,7 @@ #ifndef MINISHELL_H # define MINISHELL_H -# define DEBUG 0 +# define DEBUG 1 typedef struct s_ast_n t_ast_n; typedef struct s_node t_node; @@ -41,6 +41,8 @@ typedef struct s_msh # include "exec/env.h" # include "exec/exec.h" +t_msh *init_msh(char **envp); +void free_msh(t_msh *msh); # define POW1 "\033[1;38;2;21;22;26;48;2;92;106;178m" # define POW2 "\033[1;38;2;92;106;178;48;2;54;54;54m" diff --git a/srcs/main.c b/srcs/main.c index 9cc68be..60c9a0e 100644 --- a/srcs/main.c +++ b/srcs/main.c @@ -12,7 +12,7 @@ #include "../includes/minishell.h" -char *powerline(void) +static char *powerline(void) { char *pwd; char *tilt; @@ -40,36 +40,7 @@ char *powerline(void) return (input); } -char **ft_setnewenv(void) -{ - char **envp; - - envp = malloc(sizeof(char *) * 2); - if (!envp) - return (NULL); - envp[0] = ft_strjoin("PWD=", getcwd(NULL, 0)); - envp[1] = ft_strdup("SHLVL=1"); - if (!envp[0] || !envp[1]) - return (ft_free(&envp[0]), ft_free(&envp[1]), NULL); - return (envp); -} - -t_msh *init_msh(char **envp) -{ - t_msh *msh; - - msh = malloc(sizeof(t_msh) * 1); - msh->ex_code = 0; - if (!msh) - return (NULL); - if (!envp[0]) - msh->env = ft_setnewenv(); - else - msh->env = init_env(envp); - return (msh); -} - -void interpret_cmd(char **input, t_msh *msh) +static void interpret_cmd(char **input, t_msh *msh) { msh->head = parser(*input, msh); msh->ex_code = execute_command(msh->head); @@ -102,4 +73,5 @@ int main(int ac, char **av, char **envp) input = ft_strdup(av[1]); interpret_cmd(&input, msh); } + free_msh(msh); } diff --git a/srcs/msh_struct.c b/srcs/msh_struct.c new file mode 100644 index 0000000..80c9a7c --- /dev/null +++ b/srcs/msh_struct.c @@ -0,0 +1,48 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* msh_struct.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: nalebrun +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/06 15:32:03 by nalebrun #+# #+# */ +/* Updated: 2025/02/06 15:32:03 by nalebrun ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../includes/minishell.h" + +static char **ft_setnewenv(void) +{ + char **envp; + + envp = malloc(sizeof(char *) * 2); + if (!envp) + return (NULL); + envp[0] = ft_strjoin("PWD=", getcwd(NULL, 0)); + envp[1] = ft_strdup("SHLVL=1"); + if (!envp[0] || !envp[1]) + return (ft_free(&envp[0]), ft_free(&envp[1]), NULL); + return (envp); +} + +t_msh *init_msh(char **envp) +{ + t_msh *msh; + + msh = malloc(sizeof(t_msh) * 1); + msh->ex_code = 0; + if (!msh) + return (NULL); + if (!envp[0]) + msh->env = ft_setnewenv(); + else + msh->env = init_env(envp); + return (msh); +} + +void free_msh(t_msh *msh) +{ + free_tab(msh->env); + free(msh); +} diff --git a/srcs/parsing/ast/cutll.c b/srcs/parsing/ast/cutll.c index 403901a..09bddbb 100644 --- a/srcs/parsing/ast/cutll.c +++ b/srcs/parsing/ast/cutll.c @@ -75,9 +75,13 @@ t_nodell *cutll(t_node *lst, t_node *expected, size_t limiter) void free_lltab(t_nodell *nodell) { + t_nodell *tmp; + while (nodell) { free_linked_list(nodell->node); - nodell = nodell->next; + tmp = nodell->next; + free(nodell); + nodell = tmp; } } diff --git a/srcs/parsing/ast/subsh.c b/srcs/parsing/ast/subsh.c index 060378e..7ff9d1e 100644 --- a/srcs/parsing/ast/subsh.c +++ b/srcs/parsing/ast/subsh.c @@ -54,5 +54,5 @@ void create_subsh(t_ast_n *self, t_node *lst, t_msh *msh) ft_debug("subsh_redir : [%d]%s\n", self->redir[i], self->files[i]); ft_debug("==== SUBSH DONE\n\n"); - // free(cutted); + free_linked_list(cutted); } diff --git a/srcs/parsing/drawio/drawio_print_ast.c b/srcs/parsing/drawio/drawio_print_ast.c index fde679c..968419c 100644 --- a/srcs/parsing/drawio/drawio_print_ast.c +++ b/srcs/parsing/drawio/drawio_print_ast.c @@ -73,5 +73,6 @@ int print_ast(t_ast_n *node, t_elems *e, int fd) draw_bin_part(node, e, fd, node_id); else draw_pline_part(node, e, fd, node_id); + ft_free(&e->rect.text); return (node_id); }