From 46bea87309a619b65e83fc645cc0e9ce0005936e Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Wed, 26 Feb 2025 17:25:22 +0100 Subject: [PATCH 1/7] get inputs is done --- inc/redirect.h | 3 +- src/redirect/redirect_get_inputs.c | 48 ++++++++++++------------------ 2 files changed, 21 insertions(+), 30 deletions(-) diff --git a/inc/redirect.h b/inc/redirect.h index 4a0cdbb..3c4c63f 100644 --- a/inc/redirect.h +++ b/inc/redirect.h @@ -14,7 +14,8 @@ # define REDIRECT_H # include "minishell.h" -t_redirect *redirect_new(t_minishell *msh, t_token_type type, char *value); +t_redirect *redirect_new(t_minishell *msh, t_token_type type, char *value); +void redirect_create(t_minishell *msh, t_list **tokens, t_list **redirects, t_token_type type); t_list *redirect_get_inputs(t_minishell *msh, t_list *list); t_list *redirect_get_outputs(t_minishell *msh, t_list *list); int redirect_is_valid(t_list *lst, t_token *token, int mode); diff --git a/src/redirect/redirect_get_inputs.c b/src/redirect/redirect_get_inputs.c index cb864bf..8b4b383 100644 --- a/src/redirect/redirect_get_inputs.c +++ b/src/redirect/redirect_get_inputs.c @@ -6,53 +6,43 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/23 12:29:05 by Quinten #+# #+# */ -/* Updated: 2025/02/26 16:57:02 by qmennen ### ########.fr */ +/* Updated: 2025/02/26 17:24:53 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ #include "redirect.h" -t_list *redirect_get_inputs(t_minishell *msh, t_list *list) +static void check_heredoc(t_minishell *msh, t_list *current, t_token *token) { - t_list *current; - t_list *redirects; - t_token *token; - int result; + if (token->type == T_HEREDOC && redirect_is_valid(current, token, -1)) + process_heredoc(msh, token, current->next->content); +} + +t_list *redirect_get_inputs(t_minishell *msh, t_list *list) +{ + t_list *current; + t_list *redirects; + t_token *token; + int flag; redirects = NULL; current = list; - result = 1; - while (current && result) + flag = 1; + token = (t_token *)current->content; + while (current && flag && !redirect_is_delimiter(token)) { token = (t_token *)current->content; - if (redirect_is_delimiter(token)) - break ; if (token->type != T_REDIRECT_IN && token->type != T_HEREDOC) { current = current->next; continue ; } - if (token->type == T_HEREDOC && redirect_is_valid(current, token, -1)) - result = process_heredoc(msh, token, current->next->content); - if (redirect_is_valid(current, token, F_OK | R_OK)) - { - ft_lstadd_back(&redirects, ft_lstnew_safe(msh, - redirect_new(msh, token->type, - ft_strdup_safe(msh, - ((t_token *)current->next->content)->value)))); - current = current->next; - continue; - } - else - { - ft_lstadd_front(&redirects, ft_lstnew_safe(msh, redirect_new(msh, T_ERROR, NULL))); - break; - } + check_heredoc(msh, current, token); + flag = redirect_is_valid(current, token, F_OK | R_OK); + redirect_create(msh, ¤t, &redirects, token->type); current = current->next; } - if (result < 0) - { + if (flag <= 0) ft_lstadd_front(&redirects, ft_lstnew_safe(msh, redirect_new(msh, T_ERROR, NULL))); - } return (redirects); } From d96b23ca028fc30a8eb2cc59d476623312a00736 Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Wed, 26 Feb 2025 17:27:38 +0100 Subject: [PATCH 2/7] redirect out --- src/redirect/redirect_get_outputs.c | 23 ++++++++--------------- src/redirect/redirect_new.c | 14 ++++++++++++++ src/redirect/redirect_valid_type.c | 2 +- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/redirect/redirect_get_outputs.c b/src/redirect/redirect_get_outputs.c index 8384e02..7183617 100644 --- a/src/redirect/redirect_get_outputs.c +++ b/src/redirect/redirect_get_outputs.c @@ -17,32 +17,25 @@ t_list *redirect_get_outputs(t_minishell *msh, t_list *list) t_list *current; t_list *redirects; t_token *token; + int flag; + flag = 1; redirects = NULL; current = list; - while (current) + token = (t_token *)current->content; + while (current && flag && !redirect_is_delimiter(token)) { token = (t_token *)current->content; - if (redirect_is_delimiter(token)) - break ; if (token->type != T_REDIRECT_OUT && token->type != T_APPEND_OUT) { current = current->next; continue ; } - if (redirect_is_valid(current, token, -1)) - { - ft_lstadd_front(&redirects, - ft_lstnew_safe(msh, redirect_new(msh, token->type, ft_strdup_safe(msh, ((t_token *)current->next->content)->value)))); - current = current->next; - continue ; - } - else - { - ft_lstadd_front(&redirects, ft_lstnew_safe(msh, redirect_new(msh, T_ERROR, NULL))); - break ; - } + flag = redirect_is_valid(current, token, -1); + redirect_create(msh, ¤t, &redirects, token->type); current = current->next; } + if (flag <= 0) + ft_lstadd_front(&redirects, ft_lstnew_safe(msh, redirect_new(msh, T_ERROR, NULL))); return (redirects); } diff --git a/src/redirect/redirect_new.c b/src/redirect/redirect_new.c index 662d337..98bd6a4 100644 --- a/src/redirect/redirect_new.c +++ b/src/redirect/redirect_new.c @@ -23,3 +23,17 @@ t_redirect *redirect_new(t_minishell *msh, t_token_type type, char *value) result->value = value; return (result); } +void redirect_create(t_minishell *msh, t_list **tokens, t_list **redirects, t_token_type type) +{ + t_list *new; + t_redirect *redir; + t_token *file_token; + char *file_name; + + file_token = (t_token *)((*tokens)->next->content); + file_name = ft_strdup_safe(msh, file_token->value); + redir = redirect_new(msh, type, file_name); + new = ft_lstnew_safe(msh, redir); + ft_lstadd_back(redirects, new); + *tokens = (*tokens)->next; +} \ No newline at end of file diff --git a/src/redirect/redirect_valid_type.c b/src/redirect/redirect_valid_type.c index 7824a23..b95746d 100644 --- a/src/redirect/redirect_valid_type.c +++ b/src/redirect/redirect_valid_type.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/23 12:30:18 by Quinten #+# #+# */ -/* Updated: 2025/02/26 16:56:51 by qmennen ### ########.fr */ +/* Updated: 2025/02/26 17:12:40 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ From ce2c50e753570b0b79f337af22e752f1a6bf130e Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Wed, 26 Feb 2025 17:45:05 +0100 Subject: [PATCH 3/7] redirect norminette --- inc/redirect.h | 1 + sources.mk | 24 ------------------------ src/redirect/redirect_get_inputs.c | 4 ++-- src/redirect/redirect_get_outputs.c | 4 ++-- src/redirect/redirect_new.c | 13 +++++++++---- src/redirect/redirect_new_error.c | 23 +++++++++++++++++++++++ src/redirect/redirect_valid_type.c | 8 ++++---- 7 files changed, 41 insertions(+), 36 deletions(-) delete mode 100644 sources.mk create mode 100644 src/redirect/redirect_new_error.c diff --git a/inc/redirect.h b/inc/redirect.h index 3c4c63f..2da3c94 100644 --- a/inc/redirect.h +++ b/inc/redirect.h @@ -15,6 +15,7 @@ # include "minishell.h" t_redirect *redirect_new(t_minishell *msh, t_token_type type, char *value); +void redirect_new_error(t_minishell *msh, t_list **redirects); void redirect_create(t_minishell *msh, t_list **tokens, t_list **redirects, t_token_type type); t_list *redirect_get_inputs(t_minishell *msh, t_list *list); t_list *redirect_get_outputs(t_minishell *msh, t_list *list); diff --git a/sources.mk b/sources.mk deleted file mode 100644 index b632b98..0000000 --- a/sources.mk +++ /dev/null @@ -1,24 +0,0 @@ -VPATH = src:src/prompt:src/utils:src/lexer:src/token:src/environment:src/executor:src/parser:src/debug:src/expander:src/builtin:src/signal:src/redirect: -SOURCES = history_load.c history_write.c prompt.c print_banner.c \ -init_minishell.c ft_substr_safe.c check_malloc.c error_msg.c \ -free_command_list.c free_freelist.c free_lexer.c free_minishell.c \ -free_minishell_line.c free_safe.c free_token.c free_token_list.c \ -ft_lstclear_safe.c ft_lstnew_safe.c ft_strdup_safe.c \ -ft_strjoin_safe.c malloc_safe.c lexer_read_char.c lexer_new.c \ -lexer_parse_input.c lexer_read_word.c lexer_token_next.c token_new.c \ -token_parse.c environment_add.c environment_del.c environment_free.c \ -environment_free_list.c environment_get.c environment_get_arr.c \ -environment_parse.c environment_print.c executor_close_fds.c \ -executor_absolute_path.c executor_child.c executor_count_fds.c \ -executor_create_pipes.c executor_create_redirects.c \ -executor_execute_pipeline.c executor_fork.c executor_open_fds.c \ -parser_get_arguments.c parser_new_command.c parser_get_commands.c \ -print_commands.c print_freelist.c expander_is_character.c \ -expander_expand_dollar.c expander_allocate_memory.c \ -expander_parse_string.c expander_parse_variables.c \ -expander_get_variable.c builtin_cd.c builtin_echo.c builtin_env.c \ -builtin_exit.c builtin_export.c builtin_pwd.c builtin_router.c \ -builtin_unset.c is_builtin.c simple_builtins.c signal.c \ -signal_init.c.c redirect_get_outputs.c redirect_new.c \ -redirect_get_inputs.c redirect_valid_type.c \ -redirect_process_heredoc.c main.c \ diff --git a/src/redirect/redirect_get_inputs.c b/src/redirect/redirect_get_inputs.c index 8b4b383..2eaabd3 100644 --- a/src/redirect/redirect_get_inputs.c +++ b/src/redirect/redirect_get_inputs.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/23 12:29:05 by Quinten #+# #+# */ -/* Updated: 2025/02/26 17:24:53 by qmennen ### ########.fr */ +/* Updated: 2025/02/26 17:38:59 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -43,6 +43,6 @@ t_list *redirect_get_inputs(t_minishell *msh, t_list *list) current = current->next; } if (flag <= 0) - ft_lstadd_front(&redirects, ft_lstnew_safe(msh, redirect_new(msh, T_ERROR, NULL))); + redirect_new_error(msh, &redirects); return (redirects); } diff --git a/src/redirect/redirect_get_outputs.c b/src/redirect/redirect_get_outputs.c index 7183617..19a4a4e 100644 --- a/src/redirect/redirect_get_outputs.c +++ b/src/redirect/redirect_get_outputs.c @@ -31,11 +31,11 @@ t_list *redirect_get_outputs(t_minishell *msh, t_list *list) current = current->next; continue ; } - flag = redirect_is_valid(current, token, -1); + flag = redirect_is_valid(current, token, -1); redirect_create(msh, ¤t, &redirects, token->type); current = current->next; } if (flag <= 0) - ft_lstadd_front(&redirects, ft_lstnew_safe(msh, redirect_new(msh, T_ERROR, NULL))); + redirect_new_error(msh, &redirects); return (redirects); } diff --git a/src/redirect/redirect_new.c b/src/redirect/redirect_new.c index 98bd6a4..ee11cf9 100644 --- a/src/redirect/redirect_new.c +++ b/src/redirect/redirect_new.c @@ -23,7 +23,9 @@ t_redirect *redirect_new(t_minishell *msh, t_token_type type, char *value) result->value = value; return (result); } -void redirect_create(t_minishell *msh, t_list **tokens, t_list **redirects, t_token_type type) + +void redirect_create(t_minishell *msh, t_list **tokens, t_list **redirects, +t_token_type type) { t_list *new; t_redirect *redir; @@ -31,9 +33,12 @@ void redirect_create(t_minishell *msh, t_list **tokens, t_list **redirects, t_to char *file_name; file_token = (t_token *)((*tokens)->next->content); - file_name = ft_strdup_safe(msh, file_token->value); + file_name = NULL; + if (file_token) + file_name = ft_strdup_safe(msh, file_token->value); redir = redirect_new(msh, type, file_name); new = ft_lstnew_safe(msh, redir); ft_lstadd_back(redirects, new); - *tokens = (*tokens)->next; -} \ No newline at end of file + if (tokens) + *tokens = (*tokens)->next; +} diff --git a/src/redirect/redirect_new_error.c b/src/redirect/redirect_new_error.c new file mode 100644 index 0000000..076e062 --- /dev/null +++ b/src/redirect/redirect_new_error.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* redirect_new_error.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/26 17:37:12 by qmennen #+# #+# */ +/* Updated: 2025/02/26 17:44:49 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void redirect_new_error(t_minishell *msh, t_list **redirects) +{ + t_list *new; + t_redirect *redir; + + redir = redirect_new(msh, T_ERROR, NULL); + new = ft_lstnew_safe(msh, redir); + ft_lstadd_back(redirects, new); +} diff --git a/src/redirect/redirect_valid_type.c b/src/redirect/redirect_valid_type.c index b95746d..8d232d0 100644 --- a/src/redirect/redirect_valid_type.c +++ b/src/redirect/redirect_valid_type.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/23 12:30:18 by Quinten #+# #+# */ -/* Updated: 2025/02/26 17:12:40 by qmennen ### ########.fr */ +/* Updated: 2025/02/26 17:40:44 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,9 +20,9 @@ int redirect_token_type(t_token *token) || token->type == T_APPEND_OUT); } -int redirect_is_valid(t_list *lst, t_token *token, int mode) +int redirect_is_valid(t_list *lst, t_token *token, int mode) { - t_token *next; + t_token *next; if (!lst->next) return (0); @@ -39,7 +39,7 @@ int redirect_is_valid(t_list *lst, t_token *token, int mode) return (redirect_token_type(token) && next->type < 3); } -int redirect_is_delimiter(t_token *token) +int redirect_is_delimiter(t_token *token) { return (token->type == T_PIPE || token->type == T_AND From 5f30d2b650910a57bc4cc4822954b871ae68a405 Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Wed, 26 Feb 2025 18:36:06 +0100 Subject: [PATCH 4/7] fix: only parse dqword with $ --- src/parser/parser_get_arguments.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/parser/parser_get_arguments.c b/src/parser/parser_get_arguments.c index 25b298f..b0f2033 100644 --- a/src/parser/parser_get_arguments.c +++ b/src/parser/parser_get_arguments.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* :::::::: */ -/* parser_get_arguments.c :+: :+: */ -/* +:+ */ -/* By: qmennen +#+ */ -/* +#+ */ -/* Created: 2025/02/11 16:20:09 by qmennen #+# #+# */ -/* Updated: 2025/02/26 16:14:14 by whaffman ######## odam.nl */ +/* ::: :::::::: */ +/* parser_get_arguments.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/11 16:20:09 by qmennen #+# #+# */ +/* Updated: 2025/02/26 18:35:27 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -38,7 +38,7 @@ static int parser_should_expand(t_list *value) token = (t_token *)value->content; if (!token) return (0); - return (token->type == T_DQWORD + return ((token->type == T_DQWORD && ft_strchr(token->value, '$')) || (token->type == T_WORD && token->value[0] == '$' && token->value[1])); @@ -60,8 +60,7 @@ char **parser_get_arguments(t_list *list, t_minishell *msh) if (parser_should_expand(current)) args[i] = expander_parse_string( ((t_token *)current->content)->value, msh); - else if (((t_token *)current->content)->type == T_WORD - || ((t_token *)current->content)->type == T_SQWORD) + else if (((t_token *)current->content)->type < 3) args[i] = ft_strdup_safe(msh, ((t_token *)current->content)->value); current = current->next; From 2059f7d634b2c744f53082b8c0ce4eb58d34e8c5 Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Wed, 26 Feb 2025 18:36:16 +0100 Subject: [PATCH 5/7] norminette parse string --- src/expander/expander_parse_string.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/expander/expander_parse_string.c b/src/expander/expander_parse_string.c index 42a1bbd..a8752ac 100644 --- a/src/expander/expander_parse_string.c +++ b/src/expander/expander_parse_string.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* :::::::: */ -/* expander_parse_string.c :+: :+: */ -/* +:+ */ -/* By: qmennen +#+ */ -/* +#+ */ -/* Created: 2025/02/18 19:00:35 by qmennen #+# #+# */ -/* Updated: 2025/02/26 16:13:40 by whaffman ######## odam.nl */ +/* ::: :::::::: */ +/* expander_parse_string.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/18 19:00:35 by qmennen #+# #+# */ +/* Updated: 2025/02/26 18:33:41 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -37,17 +37,16 @@ char *expander_parse_string(char *s, t_minishell *msh) variables = expander_parse_variables(s, msh); string = expander_allocate_memory(msh, s, variables); + current = variables; i = 0; j = 0; - current = variables; - while (s[i]) + while (s[i] && current) { if (s[i] == '$' && s[i + 1]) { i++; i += expander_expand_dollar(s + i, string, &j, current); - if (current) - current = current->next; + current = current->next; } else string[j++] = s[i++]; From 5b3d446b750220b550780407224480a14a125e25 Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Wed, 26 Feb 2025 18:36:33 +0100 Subject: [PATCH 6/7] null terminate exapnd string mem --- src/expander/expander_allocate_memory.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/expander/expander_allocate_memory.c b/src/expander/expander_allocate_memory.c index 317466c..bd92a16 100644 --- a/src/expander/expander_allocate_memory.c +++ b/src/expander/expander_allocate_memory.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* :::::::: */ -/* expander_allocate_memory.c :+: :+: */ -/* +:+ */ -/* By: qmennen +#+ */ -/* +#+ */ -/* Created: 2025/02/19 13:57:19 by qmennen #+# #+# */ -/* Updated: 2025/02/26 16:10:42 by whaffman ######## odam.nl */ +/* ::: :::::::: */ +/* expander_allocate_memory.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/19 13:57:19 by qmennen #+# #+# */ +/* Updated: 2025/02/26 18:05:17 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -37,5 +37,6 @@ char *expander_allocate_memory( } size += ft_strlen(s); string = malloc_safe(msh, size); + string[0] = 0; return (string); } From 11b19749f0109b01b57414cd1dd56a1e21fff4a2 Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Wed, 26 Feb 2025 18:36:45 +0100 Subject: [PATCH 7/7] print correct command output --- src/executor/executor_child.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/executor/executor_child.c b/src/executor/executor_child.c index 27f1d7c..904bedd 100644 --- a/src/executor/executor_child.c +++ b/src/executor/executor_child.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* :::::::: */ -/* executor_child.c :+: :+: */ -/* +:+ */ -/* By: willem +#+ */ -/* +#+ */ -/* Created: 2025/02/12 21:25:10 by willem #+# #+# */ -/* Updated: 2025/02/26 16:09:44 by whaffman ######## odam.nl */ +/* ::: :::::::: */ +/* executor_child.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/12 21:25:10 by willem #+# #+# */ +/* Updated: 2025/02/26 18:20:34 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,11 +21,11 @@ void executor_child(t_minishell *msh, t_command *command) if (command->fd_out != 1) dup2(command->fd_out, 1); executor_close_fds(command->n_fds); - path = executor_absolute_path(msh, command->command); + path = executor_absolute_path(msh, command->args[0]); if (path == NULL) { ft_putstr_fd(RED BOLD, 2); - ft_putstr_fd(command->command, 2); + ft_putstr_fd(command->args[0], 2); ft_putstr_fd(": " RESET "command not found\n", 2); return ; }