aboutsummaryrefslogtreecommitdiff
path: root/src/eval/redir.c
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2020-10-09 14:55:28 +0200
committerCharles Cabergs <me@cacharle.xyz>2020-10-09 14:55:28 +0200
commita238d9aa50f88af04279d7e29b540bbad6d2f842 (patch)
tree11c17f98df037623d7f9b4d13830b4de24cadf79 /src/eval/redir.c
parent2a8056e885151fa155bf82a3d8cc97b0905ea577 (diff)
downloadminishell-a238d9aa50f88af04279d7e29b540bbad6d2f842.tar.gz
minishell-a238d9aa50f88af04279d7e29b540bbad6d2f842.tar.bz2
minishell-a238d9aa50f88af04279d7e29b540bbad6d2f842.zip
Norming eval
Diffstat (limited to 'src/eval/redir.c')
-rw-r--r--src/eval/redir.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/src/eval/redir.c b/src/eval/redir.c
index 0d830e2..9d88b29 100644
--- a/src/eval/redir.c
+++ b/src/eval/redir.c
@@ -6,7 +6,7 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/06/15 11:05:34 by charles #+# #+# */
-/* Updated: 2020/09/16 16:17:09 by charles ### ########.fr */
+/* Updated: 2020/10/09 14:38:16 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -56,6 +56,14 @@ static int st_open_replace_dispatch(char *filename, int fds[2], enum e_tok tag)
return (st_open_replace(filename, fd, oflag));
}
+static int st_tok_lsts_destroy_ret(
+ int ret, t_tok_lst **tokens1, t_tok_lst **tokens2)
+{
+ tok_lst_destroy(tokens1, free);
+ tok_lst_destroy(tokens2, free);
+ return (ret);
+}
+
int redir_extract(t_tok_lst **redirs, t_env env, int fds[2])
{
t_tok_lst *after;
@@ -65,9 +73,6 @@ int redir_extract(t_tok_lst **redirs, t_env env, int fds[2])
if (*redirs == NULL)
return (0);
- if (!((*redirs)->tag & TAG_IS_REDIR) || (*redirs)->next == NULL
- || !((*redirs)->next->tag & TAG_IS_STR))
- return (EVAL_FATAL);
curr = (*redirs)->next;
after = NULL;
while (curr != NULL && curr->tag & TAG_IS_STR)
@@ -80,17 +85,9 @@ int redir_extract(t_tok_lst **redirs, t_env env, int fds[2])
curr = curr->next;
}
if ((status = preprocess_filename(&(*redirs)->next, env, &filename)))
- {
- tok_lst_destroy(redirs, free);
- tok_lst_destroy(&after, free);
- return (status);
- }
+ return (st_tok_lsts_destroy_ret(status, redirs, &after));
if ((status = st_open_replace_dispatch(filename, fds, (*redirs)->tag)) != 0)
- {
- tok_lst_destroy(redirs, free);
- tok_lst_destroy(&after, free);
- return (status);
- }
+ return (st_tok_lsts_destroy_ret(status, redirs, &after));
tok_lst_destroy(redirs, free);
free(filename);
return (redir_extract(&after, env, fds));