update: command list is now freed completely if any error ocurrs
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
/* By: sede-san <sede-san@student.42madrid.com +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/10/22 19:03:51 by sede-san #+# #+# */
|
||||
/* Updated: 2026/02/11 00:35:08 by sede-san ### ########.fr */
|
||||
/* Updated: 2026/02/12 03:06:43 by sede-san ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@@ -32,9 +32,9 @@ extern t_list *lex(const char *line);
|
||||
extern void token_clear(t_token *token);
|
||||
extern t_command *command_new(t_list **tokens);
|
||||
extern void command_clear(t_command *command);
|
||||
extern void command_add_tokens(t_command *command, t_list **tokens);
|
||||
extern void command_add_tokens(t_command **command, t_list **tokens);
|
||||
extern bool is_pipe(t_token *token);
|
||||
extern bool is_redirection(t_token *token);
|
||||
void redirection_add(t_list **tokens, t_token *token, t_command *command);
|
||||
void words_add(t_list **tokens, t_command *command);
|
||||
void redirection_add(t_list **tokens, t_token *token, t_command **command);
|
||||
void words_add(t_list **tokens, t_command **command);
|
||||
#endif /* PARSER_H */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/* By: sede-san <sede-san@student.42madrid.com +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/10/22 18:37:38 by sede-san #+# #+# */
|
||||
/* Updated: 2026/02/12 02:55:51 by sede-san ### ########.fr */
|
||||
/* Updated: 2026/02/12 03:06:20 by sede-san ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@@ -119,7 +119,7 @@ t_command *command_new(
|
||||
delimiter_token = ft_lstfind(current_token, (bool (*)(void *))is_pipe);
|
||||
while (command != NULL && current_token != delimiter_token)
|
||||
{
|
||||
command_add_tokens(command, ¤t_token);
|
||||
command_add_tokens(&command, ¤t_token);
|
||||
}
|
||||
*tokens = current_token;
|
||||
return (command);
|
||||
@@ -190,7 +190,7 @@ void redirection_clear(
|
||||
* the token.
|
||||
*/
|
||||
void command_add_tokens(
|
||||
t_command *command,
|
||||
t_command **command,
|
||||
t_list **tokens
|
||||
)
|
||||
{
|
||||
@@ -234,7 +234,7 @@ char **args_to_array(
|
||||
*/
|
||||
void words_add(
|
||||
t_list **tokens,
|
||||
t_command *command
|
||||
t_command **command
|
||||
)
|
||||
{
|
||||
t_list *args;
|
||||
@@ -247,20 +247,20 @@ void words_add(
|
||||
while (arg != NULL && token->type == TOKEN_WORD)
|
||||
{
|
||||
ft_lstadd_back(&args, ft_lstnew(ft_strdup(token->value)));
|
||||
command->argc++;
|
||||
(*command)->argc++;
|
||||
arg = arg->next;
|
||||
if (arg != NULL)
|
||||
token = (t_token *)arg->content;
|
||||
}
|
||||
*tokens = arg;
|
||||
command->argv = args_to_array(args, command->argc);
|
||||
(*command)->argv = args_to_array(args, (*command)->argc);
|
||||
ft_lstclear_nodes(&args);
|
||||
}
|
||||
|
||||
void redirection_add(
|
||||
t_list **tokens,
|
||||
t_token *token,
|
||||
t_command *command
|
||||
t_command **command
|
||||
)
|
||||
{
|
||||
t_redirection *redirection;
|
||||
@@ -268,7 +268,11 @@ void redirection_add(
|
||||
|
||||
redirection = redirection_new(tokens);
|
||||
if (redirection == NULL)
|
||||
{
|
||||
command_clear(*command);
|
||||
*command = NULL;
|
||||
return ;
|
||||
}
|
||||
redirection_tokens = ft_lstnew(redirection);
|
||||
if (redirection_tokens == NULL)
|
||||
{
|
||||
@@ -276,9 +280,9 @@ void redirection_add(
|
||||
return (malloc_error());
|
||||
}
|
||||
if (token->type == TOKEN_HEREDOC)
|
||||
ft_lstadd_back(&command->heredocs, redirection_tokens);
|
||||
ft_lstadd_back(&(*command)->heredocs, redirection_tokens);
|
||||
else
|
||||
ft_lstadd_back(&command->redirections, redirection_tokens);
|
||||
ft_lstadd_back(&(*command)->redirections, redirection_tokens);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user