refactor: creating commands

This commit is contained in:
Quinten Mennen 2025-02-27 16:05:15 +01:00
parent 859b9c181a
commit e5569d9b0b
4 changed files with 51 additions and 35 deletions

View File

@ -1,23 +1,24 @@
/* ************************************************************************** */ /* ************************************************************************** */
/* */ /* */
/* :::::::: */ /* :::::::: */
/* parser.h :+: :+: */ /* parser.h :+: :+: */
/* +:+ */ /* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/02/11 14:03:03 by qmennen #+# #+# */ /* Created: 2025/02/11 14:03:03 by qmennen #+# #+# */
/* Updated: 2025/02/11 17:19:01 by whaffman ######## odam.nl */ /* Updated: 2025/02/11 17:19:01 by whaffman ######## odam.nl */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#ifndef PARSER_H #ifndef PARSER_H
# define PARSER_H # define PARSER_H
# include "minishell.h" # include "minishell.h"
t_command *parser_command_new(t_minishell *msh, char *cmd); t_command *parser_alloc_command(t_minishell *msh, char *cmd);
char **parser_get_arguments(t_list *list, t_minishell *msh); void parser_create_command(t_minishell *msh, t_command *cmd, t_list **l_tkn);
t_list *parser_get_commands(t_minishell *msh); char **parser_get_arguments(t_list *list, t_minishell *msh);
t_list *parser_get_input_redirects(t_list *list); t_list *parser_get_commands(t_minishell *msh);
t_list *parser_get_input_redirects(t_list *list);
#endif
#endif

View File

@ -12,7 +12,7 @@
#include "minishell.h" #include "minishell.h"
t_command *parser_command_new(t_minishell *msh, char *cmd) t_command *parser_alloc_command(t_minishell *msh, char *cmd)
{ {
t_command *command; t_command *command;

View File

@ -0,0 +1,20 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* parser_create_command.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/27 13:35:02 by qmennen #+# #+# */
/* Updated: 2025/02/27 13:36:48 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
#include "minishell.h"
void parser_create_command(t_minishell *msh, t_command *cmd, t_list **l_tkn)
{
cmd->args = parser_get_arguments(*l_tkn, msh);
cmd->redirect_in = redirect_get_inputs(msh, *l_tkn);
cmd->redirect_out = redirect_get_outputs(msh, *l_tkn);
}

View File

@ -6,19 +6,18 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/11 14:06:02 by qmennen #+# #+# */ /* Created: 2025/02/11 14:06:02 by qmennen #+# #+# */
/* Updated: 2025/02/18 20:36:01 by qmennen ### ########.fr */ /* Updated: 2025/02/27 13:38:56 by qmennen ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "minishell.h" #include "minishell.h"
#include "utils.h"
static int is_command_token(t_token *token) static int is_command_token(t_token *token)
{ {
return (token->type < 3 || redirect_token_type(token)); return (token->type < 3 || redirect_token_type(token));
} }
static int validate_redirects(t_list *lst) static int validate_redirects(t_list *lst)
{ {
t_list *token; t_list *token;
@ -46,14 +45,10 @@ t_list *parser_get_commands(t_minishell *msh)
while (current) while (current)
{ {
token = (t_token *) current->content; token = (t_token *) current->content;
command = parser_command_new(msh, ft_strdup_safe(msh, token->value)); command = parser_alloc_command(msh, ft_strdup_safe(msh, token->value));
command->args = parser_get_arguments(current, msh); parser_create_command(msh, command, &current);
command->redirect_in = redirect_get_inputs(msh, current); if (!validate_redirects(command->redirect_in) || !validate_redirects(command->redirect_out))
command->redirect_out = redirect_get_outputs(msh, current);
if (!validate_redirects(command->redirect_in))
{
break ; break ;
}
ft_lstadd_back(&command_list, ft_lstnew_safe(msh, command)); ft_lstadd_back(&command_list, ft_lstnew_safe(msh, command));
while (current && is_command_token((t_token *)current->content)) while (current && is_command_token((t_token *)current->content))
current = current->next; current = current->next;