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

View File

@ -12,7 +12,7 @@
#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;

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> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 "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));
}
static int validate_redirects(t_list *lst)
static int validate_redirects(t_list *lst)
{
t_list *token;
@ -46,14 +45,10 @@ t_list *parser_get_commands(t_minishell *msh)
while (current)
{
token = (t_token *) current->content;
command = parser_command_new(msh, ft_strdup_safe(msh, token->value));
command->args = parser_get_arguments(current, msh);
command->redirect_in = redirect_get_inputs(msh, current);
command->redirect_out = redirect_get_outputs(msh, current);
if (!validate_redirects(command->redirect_in))
{
command = parser_alloc_command(msh, ft_strdup_safe(msh, token->value));
parser_create_command(msh, command, &current);
if (!validate_redirects(command->redirect_in) || !validate_redirects(command->redirect_out))
break ;
}
ft_lstadd_back(&command_list, ft_lstnew_safe(msh, command));
while (current && is_command_token((t_token *)current->content))
current = current->next;