Fixed variable expansion errors
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user