diff --git a/inc/parser.h b/inc/parser.h index 2af5e5a..f0675a1 100644 --- a/inc/parser.h +++ b/inc/parser.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ */ /* +#+ */ /* Created: 2025/02/11 14:03:03 by qmennen #+# #+# */ -/* Updated: 2025/03/07 16:14:15 by whaffman ######## odam.nl */ +/* Updated: 2025/03/17 14:00:03 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -21,7 +21,8 @@ t_list *parser_get_commands(t_minishell *msh); t_list *parser_get_input_redirects(t_list *list); void parser_create_command(t_minishell *msh, t_command *cmd, t_list **l_tkn); -char **parser_get_arguments(t_list *list, t_minishell *msh); +char **parser_get_arguments(t_minishell *msh, + t_list *list, int argc, char **args); int parser_validate_command(t_command *command); int parser_count_arguments(t_list *list); char *parser_concatenate(t_minishell *msh, char *str1, char *str2); diff --git a/src/parser/parser_create_command.c b/src/parser/parser_create_command.c index 723f860..d648322 100644 --- a/src/parser/parser_create_command.c +++ b/src/parser/parser_create_command.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* ::: :::::::: */ -/* parser_create_command.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: qmennen +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/02/27 13:35:02 by qmennen #+# #+# */ -/* Updated: 2025/02/27 13:36:48 by qmennen ### ########.fr */ +/* :::::::: */ +/* parser_create_command.c :+: :+: */ +/* +:+ */ +/* By: qmennen +#+ */ +/* +#+ */ +/* Created: 2025/02/27 13:35:02 by qmennen #+# #+# */ +/* Updated: 2025/03/17 14:01:09 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -14,7 +14,11 @@ void parser_create_command(t_minishell *msh, t_command *cmd, t_list **l_tkn) { - cmd->args = parser_get_arguments(*l_tkn, msh); + int argc; + + argc = parser_count_arguments(*l_tkn); + cmd->args = malloc_safe(msh, (argc + 1) * sizeof(char *)); + parser_get_arguments(msh, *l_tkn, argc, cmd->args); cmd->redirect_in = redirect_get_inputs(msh, *l_tkn); cmd->redirect_out = redirect_get_outputs(msh, *l_tkn); } diff --git a/src/parser/parser_get_arguments.c b/src/parser/parser_get_arguments.c index bec3632..09c13eb 100644 --- a/src/parser/parser_get_arguments.c +++ b/src/parser/parser_get_arguments.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ */ /* +#+ */ /* Created: 2025/02/11 16:20:09 by qmennen #+# #+# */ -/* Updated: 2025/03/07 16:45:54 by whaffman ######## odam.nl */ +/* Updated: 2025/03/17 13:59:28 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -32,32 +32,29 @@ static int parser_should_concact(t_minishell *msh, int argi, return (c_tkn->type < 3 && p_tkn->type < 3 && !ft_isspace(lexer_char)); } -char **parser_get_arguments(t_list *list, t_minishell *msh) +char **parser_get_arguments(t_minishell *msh, + t_list *list, int argc, char **args) { - t_list *current; + t_list *cur; t_list *prev; char *str; - char **args; - int argc; int i; - argc = parser_count_arguments(list); - args = malloc_safe(msh, (argc + 1) * sizeof(char *)); - current = list; + cur = list; i = 0; - while (argc > 0 && current) + while (argc > 0 && cur) { - if (token_from_list(current)->type < 3) + if (token_from_list(cur)->type < 3) { - str = parser_process_token(msh, token_list_index(list, i - 1), current); - if (parser_should_concact(msh, i, current, prev)) + str = parser_process_token(msh, token_list_index(list, i - 1), cur); + if (parser_should_concact(msh, i, cur, prev)) args[i - 1] = parser_concatenate(msh, args[i - 1], str); else if (str) args[i++] = str; argc--; } - prev = current; - current = current->next; + prev = cur; + cur = cur->next; } args[i] = 0; return (args);