aboutsummaryrefslogtreecommitdiff
path: root/src/eval/redir.c
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2020-09-10 15:08:28 +0200
committerCharles Cabergs <me@cacharle.xyz>2020-09-10 15:08:28 +0200
commitb16d4b834d95d5cc0757d09e74fe6042e55f5440 (patch)
treeaa64f6d4397a0c55337224c8cf474da73750ac30 /src/eval/redir.c
parent10b54ed457ec0999e9289811401907d3a88970dc (diff)
downloadminishell-b16d4b834d95d5cc0757d09e74fe6042e55f5440.tar.gz
minishell-b16d4b834d95d5cc0757d09e74fe6042e55f5440.tar.bz2
minishell-b16d4b834d95d5cc0757d09e74fe6042e55f5440.zip
Added better error handling in eval
Diffstat (limited to 'src/eval/redir.c')
-rw-r--r--src/eval/redir.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/src/eval/redir.c b/src/eval/redir.c
index e8796a5..9beef17 100644
--- a/src/eval/redir.c
+++ b/src/eval/redir.c
@@ -6,15 +6,15 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/06/15 11:05:34 by charles #+# #+# */
-/* Updated: 2020/08/28 17:14:19 by charles ### ########.fr */
+/* Updated: 2020/09/10 14:25:08 by charles ### ########.fr */
/* */
/* ************************************************************************** */
#include "eval.h"
-static bool st_open_replace(int *fd, char *filename, int oflag)
+static int st_open_replace(int *fd, char *filename, int oflag)
{
- if (*fd != MS_NO_FD)
+ if (*fd != FD_NONE)
close(*fd);
if (oflag & O_CREAT)
*fd = open(filename, oflag, 0644);
@@ -22,15 +22,14 @@ static bool st_open_replace(int *fd, char *filename, int oflag)
*fd = open(filename, oflag);
if (*fd == -1)
{
- g_last_status_code = 1;
errorf("%s: %s\n", filename, strerror(errno));
free(filename);
- return (false);
+ return (ERR_OPEN);
}
- return (true);
+ return (ERR_NONE);
}
-bool redir_extract(
+int redir_extract(
t_tok_lst **redirs,
t_env env,
int fds[2])
@@ -40,10 +39,10 @@ bool redir_extract(
char *filename;
if (*redirs == NULL)
- return (true);
+ return (ERR_NONE);
if (!((*redirs)->tag & TAG_IS_REDIR) || (*redirs)->next == NULL
|| !((*redirs)->next->tag & TAG_IS_STR))
- return (false);
+ return (ERR_FATAL);
curr = (*redirs)->next;
after = NULL;
while (curr != NULL && curr->tag & TAG_IS_STR)
@@ -59,18 +58,18 @@ bool redir_extract(
{
tok_lst_destroy(redirs, free);
tok_lst_destroy(&after, free);
- return (false);
+ return (ERR_FATAL);
}
if (((*redirs)->tag == TAG_REDIR_IN
- && !st_open_replace(&fds[FDS_READ], filename, O_RDONLY))
+ && st_open_replace(&fds[FD_READ], filename, O_RDONLY) != ERR_NONE)
|| ((*redirs)->tag == TAG_REDIR_OUT
- && !st_open_replace(&fds[FDS_WRITE], filename, O_WRONLY | O_CREAT | O_TRUNC))
+ && st_open_replace(&fds[FD_WRITE], filename, O_WRONLY | O_CREAT | O_TRUNC) != ERR_NONE)
|| ((*redirs)->tag == TAG_REDIR_APPEND
- && !st_open_replace(&fds[FDS_WRITE], filename, O_WRONLY | O_CREAT | O_APPEND)))
+ && st_open_replace(&fds[FD_WRITE], filename, O_WRONLY | O_CREAT | O_APPEND) != ERR_NONE))
{
tok_lst_destroy(redirs, free);
tok_lst_destroy(&after, free);
- return (false);
+ return (ERR_FATAL);
}
tok_lst_destroy(redirs, free);
free(filename);