Fixed variable expansion errors

This commit is contained in:
marcnava-42cursus
2026-02-14 13:33:44 +01:00
parent dd6101edec
commit ba40670ace
11 changed files with 27965 additions and 7 deletions

View File

@@ -12,25 +12,81 @@
#include "parser_expand_internal.h"
static void command_clear_argv_expand(
t_command *command
)
{
int i;
i = 0;
while (i < command->argc)
{
free(command->argv[i]);
i++;
}
free(command->argv);
}
static bool command_set_expanded_argv(
t_command *command,
t_list *expanded_args,
t_minishell *minishell
)
{
char **argv;
t_list *current;
int argc;
int i;
argc = ft_lstsize(expanded_args);
argv = (char **)malloc(sizeof(char *) * (argc + 1));
if (argv == NULL)
return (ft_lstclear(&expanded_args, free),
parser_expand_malloc_error(minishell), false);
i = 0;
current = expanded_args;
while (current != NULL)
{
argv[i++] = (char *)current->content;
current = current->next;
}
argv[i] = NULL;
ft_lstclear_nodes(&expanded_args);
command_clear_argv_expand(command);
command->argc = argc;
command->argv = argv;
return (true);
}
static bool expand_argv(
t_command *command,
t_minishell *minishell
)
{
int i;
char *expanded;
t_list *expanded_args;
t_list *fields;
t_list *last;
i = 0;
expanded_args = NULL;
while (i < command->argc)
{
expanded = parser_expand_word(command->argv[i], minishell, true);
if (expanded == NULL)
return (false);
free(command->argv[i]);
command->argv[i] = expanded;
fields = NULL;
if (!parser_expand_word_fields(command->argv[i], minishell,
true, &fields))
return (ft_lstclear(&expanded_args, free), false);
if (expanded_args == NULL)
expanded_args = fields;
else
{
last = ft_lstlast(expanded_args);
if (last != NULL)
last->next = fields;
}
i++;
}
return (true);
return (command_set_expanded_argv(command, expanded_args, minishell));
}
static bool expand_redirections(