From 26d351586a7a814e069a240334a1639e0492f0dd Mon Sep 17 00:00:00 2001 From: Adam Joly Date: Tue, 13 Aug 2024 16:16:28 +0200 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=F0=9F=94=A8=E3=80=8D=20fix:=20fixed?= =?UTF-8?q?=20some=20things.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/parsing.h | 3 ++- non | 0 src/parsing/check_error/check_redir.c | 20 ++++++++++++++++++-- src/parsing/tokenizer/__to_cmd.c | 24 +++++++++++++++++++++--- src/parsing/tokenizer/tokenizer.c | 13 ++++++++----- 5 files changed, 49 insertions(+), 11 deletions(-) create mode 100644 non diff --git a/include/parsing.h b/include/parsing.h index 455c074..d4a941c 100644 --- a/include/parsing.h +++ b/include/parsing.h @@ -6,7 +6,7 @@ /* By: mmoussou +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/09 16:32:21 by adjoly #+# #+# */ -/* Updated: 2024/08/13 15:11:58 by adjoly ### ########.fr */ +/* Updated: 2024/08/13 16:09:44 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,6 +15,22 @@ #include "minishell.h" bool check_redir(t_list *list) +{ + t_list *tmp; + t_cmd *cmd; + + tmp = list; + while (tmp) + { + cmd = (t_cmd *)tmp->content; + if (cmd->infile == -1 || cmd->outfile == -1) + return (send_error_parsing(ERROR_NO_FILE)); + tmp = tmp->next; + } + return (false); +} + +bool check_redir_single(t_list *list) { t_list *tmp; t_redir *redir; @@ -24,7 +40,7 @@ bool check_redir(t_list *list) { redir = (t_redir *)tmp->content; if (redir->fd < 0 && redir->fd != -2) - return (send_error_parsing(ERROR_NO_FILE)); + return (true); tmp = tmp->next; } return (false); diff --git a/src/parsing/tokenizer/__to_cmd.c b/src/parsing/tokenizer/__to_cmd.c index ada5093..4a40a96 100644 --- a/src/parsing/tokenizer/__to_cmd.c +++ b/src/parsing/tokenizer/__to_cmd.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/08/05 14:19:35 by adjoly #+# #+# */ -/* Updated: 2024/08/13 15:06:13 by adjoly ### ########.fr */ +/* Updated: 2024/08/13 16:09:24 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,6 +26,8 @@ t_list *__get_redir(char **content) { tmp = ft_lstnew(__open_heredoc(*(content + 1), list)); ft_lstadd_back(&list, tmp); + if (((t_redir *)tmp->content)->sign == ERROR) + return (list); } else if (sign != ERROR) ft_lstadd_back(&list, ft_lstnew(__to_redir(*(content + 1), sign))); @@ -41,6 +43,22 @@ void *clear_all_cmd(char **content, t_list *redir) return (NULL); } +t_cmd *return_err_cmd(char **content, t_list *redir) +{ + t_cmd *cmd; + + cmd = ft_calloc(sizeof(t_cmd), 1); + if (!cmd) + return (clear_all_cmd(content, redir)); + cmd->infile = -1; + cmd->outfile = -1; + cmd->cmd = NULL; + cmd->argv = NULL; + ft_free("a", &content); + ft_lstclear(&redir, free_redir); + return (cmd); +} + t_cmd *__to_cmd(char **content) { t_list *redir; @@ -56,8 +74,8 @@ t_cmd *__to_cmd(char **content) format_quotes(content); get_void(&content); redir = __get_redir(content); - if (check_redir(redir)) - return (clear_all_cmd(content, redir)); + if (check_redir_single(redir)) + return (return_err_cmd(content, redir)); cmd = ft_calloc(sizeof(t_cmd), 1); if (!cmd) return (clear_all_cmd(content, redir)); diff --git a/src/parsing/tokenizer/tokenizer.c b/src/parsing/tokenizer/tokenizer.c index aec47f9..2d646fb 100644 --- a/src/parsing/tokenizer/tokenizer.c +++ b/src/parsing/tokenizer/tokenizer.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/18 20:13:50 by adjoly #+# #+# */ -/* Updated: 2024/08/13 15:18:14 by adjoly ### ########.fr */ +/* Updated: 2024/08/13 15:53:00 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -41,17 +41,20 @@ t_list *tokenizer(char *readline, t_env *env) ret = __to_cmd(split_argv(env_var_replace(tmp->content, env))); if (!ret) return (clear_all(cmd, piped)); + if (((t_cmd *)ret)->infile == -2) + return (clear_all(cmd, piped)); ft_lstadd_back(&cmd, ft_lstnew(ret)); if (!cmd) return (clear_all(cmd, piped)); - if (((t_cmd *)ft_lstlast(cmd)->content)->infile == -2) - return (clear_all(cmd, piped)); - //if (!ft_lstlast(cmd)->content) - //return (clear_all(cmd, piped)); if (!cmd->next) get_list2(&cmd); tmp = tmp->next; } ft_lstclear(&piped, free); + if (check_redir(cmd)) + { + ft_lstclear(&cmd, free_cmd); + return (NULL); + } return (cmd); }