diff --git a/includes/minishell.h b/includes/minishell.h index 264b81c..def3600 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 # ifndef DIO_PATH # define DIO_PATH "ast.xml" diff --git a/includes/parser/heredoc.h b/includes/parser/heredoc.h index 6e99e66..786232c 100644 --- a/includes/parser/heredoc.h +++ b/includes/parser/heredoc.h @@ -15,8 +15,8 @@ # include "../minishell.h" -void read_hereinput(char *limiter); -void parse_heredoc(char *limiter); -void create_heredoc(t_node *lst); +void read_hereinput(char *limiter, t_node *lst, t_msh *msh); +void parse_heredoc(char *limiter, t_node *lst, t_msh *msh); +void create_heredoc(t_node *lst, t_msh *msh); #endif diff --git a/srcs/parsing/heredoc.c b/srcs/parsing/heredoc.c index a291cfb..3c8e769 100644 --- a/srcs/parsing/heredoc.c +++ b/srcs/parsing/heredoc.c @@ -60,7 +60,7 @@ static int ifremove_quote(char **str) return (ret); } -void read_hereinput(char *limiter) +void read_hereinput(char *limiter, t_node *lst, t_msh *msh) { char buf[100000]; char c; @@ -75,6 +75,8 @@ void read_hereinput(char *limiter) { ft_fprintf(2, "\n"); ft_fprintf(1, "%s\n", limiter); + free_linked_list(lst); + free_msh(msh); exit(EXIT_SUCCESS); } while (r && c != '\n' && c != '\0') @@ -87,6 +89,8 @@ void read_hereinput(char *limiter) if (ft_strncmp(buf, limiter, ft_strlen(limiter)) == 0) { ft_fprintf(1, "%s\n", buf); + free_msh(msh); + free_linked_list(lst); exit(EXIT_SUCCESS); } buf[i++] = '\n'; @@ -94,7 +98,7 @@ void read_hereinput(char *limiter) ft_fprintf(1, "%s", buf); } -void parse_heredoc(char *limiter) +void parse_heredoc(char *limiter, t_node *lst, t_msh *msh) { int fd; pid_t pid; @@ -107,7 +111,7 @@ void parse_heredoc(char *limiter) dup2(fd, STDOUT_FILENO); close(fd); while (1) - read_hereinput(limiter); + read_hereinput(limiter, lst, msh); } else if (pid > 0) { @@ -122,14 +126,14 @@ void parse_heredoc(char *limiter) } } -void create_heredoc(t_node *lst) +void create_heredoc(t_node *lst, t_msh *msh) { while (lst) { if (lst->pressision == HEREDOC && lst->next && lst->next->pressision) { lst = lst->next; - parse_heredoc(lst->val); + parse_heredoc(lst->val, lst, msh); } lst = lst->next; } diff --git a/srcs/parsing/parser.c b/srcs/parsing/parser.c index b7cb154..c847f7d 100644 --- a/srcs/parsing/parser.c +++ b/srcs/parsing/parser.c @@ -46,7 +46,7 @@ t_ast_n *parser(char *input, t_msh *msh) lst = tokenize(input); if (!lst) return (NULL); - create_heredoc(lst); + create_heredoc(lst, msh); if (DEBUG) { dio = drawio_init(DIO_PATH); diff --git a/srcs/parsing/tokenizer/linked_list.c b/srcs/parsing/tokenizer/linked_list.c index f9b171e..1842868 100644 --- a/srcs/parsing/tokenizer/linked_list.c +++ b/srcs/parsing/tokenizer/linked_list.c @@ -32,15 +32,15 @@ int add_node_back(t_node **head, char *val, t_token token, t_pres pres) { t_node *tmp; - tmp = *head; if (!val) return (0); if (!head || !(*head)) { - (*head) = create_node(val, token); + *head = create_node(val, token); (*head)->pressision = pres; return (1); } + tmp = *head; while (tmp->next != NULL) tmp = tmp->next; tmp->next = create_node(val, token); diff --git a/srcs/parsing/tokenizer/tokenizer.c b/srcs/parsing/tokenizer/tokenizer.c index 33abde2..5ff33ab 100644 --- a/srcs/parsing/tokenizer/tokenizer.c +++ b/srcs/parsing/tokenizer/tokenizer.c @@ -26,7 +26,7 @@ static t_node *tokenize_base(char *str) while (tab[i]) { if (!add_node_back(&head, tab[i], 0, 0)) - return (free(tab), NULL); + return (free_tab(tab), NULL); i++; } free_tab(tab); @@ -116,12 +116,16 @@ t_node *tokenize(char *str) head = tokenize_base(str); if (!head) return (NULL); + debug_token_list(head, "tokenizer"); if (!trim_nodes(head)) return (NULL); + debug_token_list(head, "tokenizer"); if (!unstick_nodes(head)) return (NULL); + debug_token_list(head, "tokenizer"); stick_quote_node(head, 39); stick_quote_node(head, '"'); + debug_token_list(head, "tokenizer"); set_token(head); del_void_nodes(&head); debug_token_list(head, "tokenizer"); diff --git a/srcs/powerline.c b/srcs/powerline.c index e5f2328..34b855d 100644 --- a/srcs/powerline.c +++ b/srcs/powerline.c @@ -53,14 +53,17 @@ char *powerline(t_msh *msh) char *pwd; char *input; char *prompt; + char *separator; struct winsize w; ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); pwd = get_pwd(); - prompt = ft_sprintf("%s%s%s\n%s  MMOAT %s%s %s%s %s%s%s ", SEP, rep_c('-', w.ws_col), RESET, POW1, POW2, POW3, + separator = rep_c('-', w.ws_col); + prompt = ft_sprintf("%s%s%s\n%s  MMOAT %s%s %s%s %s%s%s ", SEP, separator, RESET, POW1, POW2, POW3, POW4, pwd, RESET, POW5, RESET); input = readline(prompt); handle_input(input, msh); + free(separator); free(prompt); free(pwd); return (input);