From 8959166804f22498ae4e59aa01a94f440e83b814 Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Mon, 20 Dec 2021 15:54:07 +0100 Subject: [PATCH] norme en cours... --- minishell_tests | 2 +- srcs/parsing/expansions/expansions.c | 36 +++++++-------- srcs/parsing/redirections/redirections.c | 56 +++++++++++------------- 3 files changed, 44 insertions(+), 50 deletions(-) diff --git a/minishell_tests b/minishell_tests index 863e48a..c2e0c0b 160000 --- a/minishell_tests +++ b/minishell_tests @@ -1 +1 @@ -Subproject commit 863e48a4fa901a49f7493e9267c18c16f80bad98 +Subproject commit c2e0c0bdcbb9446608e7a1062a89533f391fd10b diff --git a/srcs/parsing/expansions/expansions.c b/srcs/parsing/expansions/expansions.c index b644740..2ae9876 100644 --- a/srcs/parsing/expansions/expansions.c +++ b/srcs/parsing/expansions/expansions.c @@ -6,7 +6,7 @@ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/11/07 02:01:33 by lperrey #+# #+# */ -/* Updated: 2021/12/15 00:20:47 by lperrey ### ########.fr */ +/* Updated: 2021/12/20 15:51:18 by hulamy ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,19 +16,24 @@ t_list *expand_token(char *content); char *rejoin_after_expand(t_list *expand_lst); int new_token_for_each_field(char **fields, t_token *t); -// 1 - chaque bout dans un element d'une t_list -// (telle quelle si non expand, ou VARIABLE de env) -// 2 - strjoin() le tout -// 3 - split avec un ft_strplit() modifié (ne splitant pas dans les quotes) -// 4 - quotes removal, ft_strdup_quotes() le tableau split -// 5 - creer un token T_WORD pour chaque *string du **split_arr -// (ft_lstadd_front() sur le token original, puis set le token orignal à : -// t->id = 0 ; free(t->content) ; t->content = NULL ; pour qu'il soit ignoré sur la suite du parsing) +/* + * 1 - chaque bout dans un element d'une t_list + * (telle quelle si non expand, ou VARIABLE de env) + * 2 - strjoin() le tout + * 3 - split avec un ft_strplit() modifié (ne splitant pas dans les quotes) + * 4 - quotes removal, ft_strdup_quotes() le tableau split + * 5 - creer un token T_WORD pour chaque *string du **split_arr + * (ft_lstadd_front() sur le token original, puis set le token orignal à : + * t->id = 0 ; + * free(t->content) ; + * t->content = NULL ; + * pour qu'il soit ignoré sur la suite du parsing) + */ int expansions(t_token *t, t_cmd **pipeline) { - int i; - t_token *next_token; + int i; + t_token *next_token; i = 0; while (t) @@ -56,26 +61,21 @@ int token_expansions(t_token *t) void *tmp; char **tmp_split; - // 1 - tmp = (t_list*)expand_token(t->content); + tmp = (t_list *)expand_token(t->content); if (!tmp) return (0); - // 2 - tmp = (char*)rejoin_after_expand(tmp); + tmp = (char *)rejoin_after_expand(tmp); if (!tmp) return (0); - // 3 tmp_split = ft_split_quotes(tmp, ' '); free(tmp); if (!tmp_split) return (0); - // 4 tmp = tmp_split; tmp_split = ft_dup_2d_arr(tmp_split, (t_dup_f)ft_strdup_quotes); ft_free_2d_arr(tmp); if (!tmp_split) return (0); - // 5 if (!new_token_for_each_field(tmp_split, t)) return (0); return (1); diff --git a/srcs/parsing/redirections/redirections.c b/srcs/parsing/redirections/redirections.c index 987d2b0..d11eb88 100644 --- a/srcs/parsing/redirections/redirections.c +++ b/srcs/parsing/redirections/redirections.c @@ -6,7 +6,7 @@ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/11/11 18:46:43 by lperrey #+# #+# */ -/* Updated: 2021/12/20 14:53:12 by hulamy ### ########.fr */ +/* Updated: 2021/12/20 15:25:16 by hulamy ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,8 +14,8 @@ int here_doc(char *delimiter); -static int redirect_cmd_less(t_token *t, t_cmd *cmd); -static int redirect_cmd_dless(t_token *t, t_cmd *cmd); +static int redirect_cmd_input(t_token *t, t_cmd *cmd); +static int redirect_cmd_heredoc(t_token *t, t_cmd *cmd); static int redirect_cmd_output(t_token *t, t_cmd *cmd); static int expand_redirection(t_token *t); @@ -30,9 +30,9 @@ int redirections(t_token *t, t_cmd **pipeline) i++; if (!pipeline[i]->error) { - if (t->id == '<' && !redirect_cmd_less(t, pipeline[i])) + if (t->id == '<' && !redirect_cmd_input(t, pipeline[i])) return (0); - else if (t->id == T_DLESS && !redirect_cmd_dless(t, pipeline[i])) + else if (t->id == T_DLESS && !redirect_cmd_heredoc(t, pipeline[i])) return (0); else if (t->id == '>' || t->id == T_DGREAT) { @@ -45,46 +45,40 @@ int redirections(t_token *t, t_cmd **pipeline) return (1); } -static int redirect_cmd_less(t_token *t, t_cmd *cmd) +static int redirect_cmd_input(t_token *t, t_cmd *cmd) { if (cmd->fd_in != STDIN_FILENO) if (close(cmd->fd_in) == -1) perror("close()"); - if (t->id == '<') + if (!expand_redirection(t)) { - if (!expand_redirection(t)) - { - cmd->error = EXIT_REDIRECTION; - return (1); - } - cmd->fd_in = open(t->next->content, O_RDONLY); - if (cmd->fd_in == -1) - { - shell_perror(t->next->content, ": ", "", 0); - cmd->error = EXIT_REDIRECTION; - } + cmd->error = EXIT_REDIRECTION; + return (1); + } + cmd->fd_in = open(t->next->content, O_RDONLY); + if (cmd->fd_in == -1) + { + shell_perror(t->next->content, ": ", "", 0); + cmd->error = EXIT_REDIRECTION; } return (1); } -static int redirect_cmd_dless(t_token *t, t_cmd *cmd) +static int redirect_cmd_heredoc(t_token *t, t_cmd *cmd) { if (cmd->fd_in != STDIN_FILENO) if (close(cmd->fd_in) == -1) perror("close()"); - else if (t->id == T_DLESS) + cmd->fd_in = here_doc(t->next->content); + if (cmd->fd_in == -1) { - cmd->fd_in = here_doc(t->next->content); - if (cmd->fd_in == -1) - { - shell_error("heredoc error", ": ", "", 0); - cmd->error = EXIT_REDIRECTION; - } - else if (cmd->fd_in > EXIT_SIGNAL) - { - cmd->fd_in = 0; - return (0); - } + shell_error("heredoc error", ": ", "", 0); + cmd->error = EXIT_REDIRECTION; + } + else if (cmd->fd_in > EXIT_SIGNAL) + { + cmd->fd_in = 0; + return (0); } return (1); }