fix: keep parsing after redirects

This commit is contained in:
Quinten 2025-03-05 11:46:46 +01:00
parent b3b6ed6d88
commit 97069cac62

View File

@ -19,16 +19,18 @@ static int count_cmds(t_list *list)
{ {
int cmds; int cmds;
t_list *current; t_list *current;
t_list *prev;
t_token *token; t_token *token;
cmds = 0; cmds = 0;
current = list; current = list;
prev = NULL;
while (current) while (current)
{ {
token = ((t_token *)current->content); token = ((t_token *)current->content);
if (token->type > 2) if (token->type < 3 && (!prev || ((t_token *)prev->content)->type < 3))
break ; cmds++;
cmds++; prev = current;
current = current->next; current = current->next;
} }
return (cmds); return (cmds);
@ -84,31 +86,34 @@ char **parser_get_arguments(t_list *list, t_minishell *msh)
t_list *current; t_list *current;
t_list *prev; t_list *prev;
char **args; char **args;
int cmds; int argc;
int i; int i;
char *str; char *str;
char *cat; char *cat;
cmds = count_cmds(list); argc = count_cmds(list);
args = malloc_safe(msh, (cmds + 1) * sizeof(char *)); args = malloc_safe(msh, (argc + 1) * sizeof(char *));
current = list; current = list;
i = 0; i = 0;
prev = NULL; prev = NULL;
while (cmds > 0 && current) while (argc > 0 && current)
{ {
str = parser_process_token(msh, args, prev, current); if (((t_token *)current->content)->type < 3 && (!prev || ((t_token *)prev->content)->type < 3))
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); str = parser_process_token(msh, args, prev, current);
ft_strlcpy(cat, args[i - 1], ft_strlen(args[i - 1]) + 1); if (i > 0 && prev && ft_strcmp(((t_token *)prev->content)->value, "") == 0)
ft_strlcat(cat, str, ft_strlen(str) + ft_strlen(args[i - 1]) + 1); {
args[i - 1] = cat; 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; prev = current;
current = current->next; current = current->next;
cmds--;
} }
args[i] = 0; args[i] = 0;
return (args); return (args);