From a680cf09a3fa4b7c6adc38e4297ee5535172826b Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Thu, 27 Aug 2020 18:47:16 +0200 Subject: Updated preprocessing, redir, ast to use t_tok_lst instead of t_ftlst --- src/eval/redir.c | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) (limited to 'src/eval/redir.c') diff --git a/src/eval/redir.c b/src/eval/redir.c index 8f3a266..3e67c74 100644 --- a/src/eval/redir.c +++ b/src/eval/redir.c @@ -6,17 +6,12 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/15 11:05:34 by charles #+# #+# */ -/* Updated: 2020/08/27 09:28:55 by charles ### ########.fr */ +/* Updated: 2020/08/27 17:06:45 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include "eval.h" -static enum e_tok st_lst_tag(t_ftlst *lst) -{ - return (((t_token*)lst->data)->tag); -} - static bool st_open_replace(int *fd, char *filename, int oflag) { if (*fd != MS_NO_FD) @@ -35,24 +30,24 @@ static bool st_open_replace(int *fd, char *filename, int oflag) } bool redir_extract( - t_ftlst *redirs, + t_tok_lst *redirs, t_env env, int fds[2]) { - t_ftlst *after; - t_ftlst *curr; - char *filename; + t_tok_lst *after; + t_tok_lst *curr; + char *filename; if (redirs == NULL) return (true); - if (!(st_lst_tag(redirs) & TAG_IS_REDIR) || redirs->next == NULL - || !(st_lst_tag(redirs->next) & TAG_IS_STR)) + if (!(redirs->tag & TAG_IS_REDIR) || redirs->next == NULL + || !(redirs->next->tag & TAG_IS_STR)) return (false); curr = redirs->next; after = NULL; - while (curr != NULL && st_lst_tag(curr) & TAG_IS_STR) + while (curr != NULL && curr->tag & TAG_IS_STR) { - if (curr->next == NULL || st_lst_tag(curr->next) & TAG_IS_REDIR) + if (curr->next == NULL || curr->next->tag & TAG_IS_REDIR) { after = curr->next; curr->next = NULL; @@ -61,20 +56,22 @@ bool redir_extract( } if ((filename = preprocess_filename(&redirs->next, env)) == NULL) { - token_destroy_lst2(redirs, after); + ft_lstdestroy((t_ftlst**)&redirs, free); + ft_lstdestroy((t_ftlst**)&after, free); return (false); } - if ((st_lst_tag(redirs) == TAG_REDIR_IN + if ((redirs->tag == TAG_REDIR_IN && !st_open_replace(&fds[FDS_READ], filename, O_RDONLY)) - || (st_lst_tag(redirs) == TAG_REDIR_OUT + || (redirs->tag == TAG_REDIR_OUT && !st_open_replace(&fds[FDS_WRITE], filename, O_WRONLY | O_CREAT | O_TRUNC)) - || (st_lst_tag(redirs) == TAG_REDIR_APPEND + || (redirs->tag == TAG_REDIR_APPEND && !st_open_replace(&fds[FDS_WRITE], filename, O_WRONLY | O_CREAT | O_APPEND))) { - token_destroy_lst2(redirs, after); + ft_lstdestroy((t_ftlst**)&redirs, free); + ft_lstdestroy((t_ftlst**)&after, free); return (false); } - token_destroy_lst(redirs); + ft_lstdestroy((t_ftlst**)&redirs, free); free(filename); return (redir_extract(after, env, fds)); } -- cgit