From 97069cac62e82c90fd4d1cd648a152a6a56410bd Mon Sep 17 00:00:00 2001 From: Quinten Date: Wed, 5 Mar 2025 11:46:46 +0100 Subject: [PATCH] fix: keep parsing after redirects --- src/parser/parser_get_arguments.c | 37 ++++++++++++++++++------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/parser/parser_get_arguments.c b/src/parser/parser_get_arguments.c index 97120d2..bf01a9b 100644 --- a/src/parser/parser_get_arguments.c +++ b/src/parser/parser_get_arguments.c @@ -19,16 +19,18 @@ static int count_cmds(t_list *list) { int cmds; t_list *current; + t_list *prev; t_token *token; cmds = 0; current = list; + prev = NULL; while (current) { token = ((t_token *)current->content); - if (token->type > 2) - break ; - cmds++; + if (token->type < 3 && (!prev || ((t_token *)prev->content)->type < 3)) + cmds++; + prev = current; current = current->next; } return (cmds); @@ -84,31 +86,34 @@ char **parser_get_arguments(t_list *list, t_minishell *msh) t_list *current; t_list *prev; char **args; - int cmds; + int argc; int i; char *str; char *cat; - cmds = count_cmds(list); - args = malloc_safe(msh, (cmds + 1) * sizeof(char *)); + argc = count_cmds(list); + args = malloc_safe(msh, (argc + 1) * sizeof(char *)); current = list; i = 0; prev = NULL; - while (cmds > 0 && current) + while (argc > 0 && current) { - str = parser_process_token(msh, args, prev, current); - if (i > 0 && prev && ft_strcmp(((t_token *)prev->content)->value, "") == 0) + if (((t_token *)current->content)->type < 3 && (!prev || ((t_token *)prev->content)->type < 3)) { - cat = malloc_safe(msh, ft_strlen(str) + ft_strlen(args[i - 1]) + 1); - ft_strlcpy(cat, args[i - 1], ft_strlen(args[i - 1]) + 1); - ft_strlcat(cat, str, ft_strlen(str) + ft_strlen(args[i - 1]) + 1); - args[i - 1] = cat; + str = parser_process_token(msh, args, prev, current); + if (i > 0 && prev && ft_strcmp(((t_token *)prev->content)->value, "") == 0) + { + cat = malloc_safe(msh, ft_strlen(str) + ft_strlen(args[i - 1]) + 1); + ft_strlcpy(cat, args[i - 1], ft_strlen(args[i - 1]) + 1); + ft_strlcat(cat, str, ft_strlen(str) + ft_strlen(args[i - 1]) + 1); + args[i - 1] = cat; + } + else if (str) + args[i++] = str; + argc--; } - else if (str) - args[i++] = str; prev = current; current = current->next; - cmds--; } args[i] = 0; return (args);