redirection tweaks
This commit is contained in:
parent
9361d965bc
commit
d051ccc127
10 changed files with 32 additions and 28 deletions
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/11/27 20:29:56 by jhalford #+# #+# */
|
||||
/* Updated: 2017/03/10 13:26:16 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/03/10 13:31:17 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/03/08 14:31:42 by jhalford #+# #+# */
|
||||
/* Updated: 2017/03/10 13:13:49 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/03/10 13:48:19 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -21,13 +21,13 @@ int exec_reset(void)
|
|||
/* exec->fd_save[1] = 1;//fcntl(STDOUT, F_DUPFD_CLOEXEC); */
|
||||
/* exec->fd_save[2] = 1;//fcntl(STDERR, F_DUPFD_CLOEXEC); */
|
||||
DG("check 0");
|
||||
if ((exec->fd_save[0] = fcntl(STDIN, F_DUPFD_CLOEXEC, 10)) == -1)
|
||||
ft_dprintf(2, "{red}%s: internal fcntl error errno=%i %s{eoc}\n", SHELL_NAME, errno);
|
||||
if ((exec->fd_save[0] = fcntl(STDIN, F_DUPFD_CLOEXEC, 10)) == -1 && errno != EBADF)
|
||||
ft_dprintf(2, "{red}%s: internal fcntl STDIN error errno=%i %s{eoc}\n", SHELL_NAME, errno);
|
||||
DG("check 1");
|
||||
if ((exec->fd_save[1] = fcntl(STDOUT, F_DUPFD_CLOEXEC, 10)) == -1)
|
||||
ft_dprintf(2, "{red}%s: internal fcntl error errno=%i %s{eoc}\n", SHELL_NAME, errno);
|
||||
if ((exec->fd_save[2] = fcntl(STDERR, F_DUPFD_CLOEXEC, 10)) == -1)
|
||||
ft_dprintf(2, "{red}%s: internal fcntl error errno=%i %s{eoc}\n", SHELL_NAME, errno);
|
||||
if ((exec->fd_save[1] = fcntl(STDOUT, F_DUPFD_CLOEXEC, 10)) == -1 && errno != EBADF)
|
||||
ft_dprintf(2, "{red}%s: internal fcntl STDOUT error errno=%i %s{eoc}\n", SHELL_NAME, errno);
|
||||
if ((exec->fd_save[2] = fcntl(STDERR, F_DUPFD_CLOEXEC, 10)) == -1 && errno != EBADF)
|
||||
ft_dprintf(2, "{red}%s: internal fcntl STDERR error errno=%i %s{eoc}\n", SHELL_NAME, errno);
|
||||
DG("saved [%i:%i:%i]", exec->fd_save[0], exec->fd_save[1], exec->fd_save[2]);
|
||||
exec->op_stack = NULL;
|
||||
exec->fdin = STDIN;
|
||||
|
|
|
|||
|
|
@ -6,16 +6,18 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/03 13:46:40 by jhalford #+# #+# */
|
||||
/* Updated: 2017/03/06 16:58:38 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/03/10 13:59:28 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "minishell.h"
|
||||
|
||||
int fd_is_valid(int fd, int has_flag)
|
||||
int fd_is_valid(int fd, int has_mode)
|
||||
{
|
||||
int flags;
|
||||
int fd_flags;
|
||||
int fd_modes;
|
||||
|
||||
flags = fcntl(fd, F_GETFD);
|
||||
return ((flags != -1 || errno != EBADF) && flags & has_flag);
|
||||
fd_modes = fcntl(fd, F_GETFL);
|
||||
fd_flags = fcntl(fd, F_GETFD);
|
||||
return ((fd_flags != -1 || errno != EBADF) && fd_modes & has_mode);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/06 22:12:31 by jhalford #+# #+# */
|
||||
/* Updated: 2017/03/06 16:54:43 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/03/10 14:01:06 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -17,14 +17,14 @@ int redirect_greatand(t_redir *redir)
|
|||
int fdold;
|
||||
int fdnew;
|
||||
|
||||
if (ft_strcmp(redir->word, "-"))
|
||||
if (ft_strcmp(redir->word, "-") == 0)
|
||||
{
|
||||
close(redir->n);
|
||||
return (0);
|
||||
}
|
||||
if (!ft_stris(redir->word, ft_isdigit))
|
||||
{
|
||||
ft_dprintf(2, "%s: %s: can only be digits", SHELL_NAME, redir->word);
|
||||
ft_dprintf(2, "{red}%s: %s: can only be digits{eoc}\n", SHELL_NAME, redir->word);
|
||||
return (1);
|
||||
}
|
||||
fdold = ft_atoi(redir->word);
|
||||
|
|
@ -33,9 +33,10 @@ int redirect_greatand(t_redir *redir)
|
|||
return (0);
|
||||
if (fdold > 9)
|
||||
return (bad_fd(fdold));
|
||||
if (fd_is_valid(fdold, O_RDONLY))
|
||||
if (fd_is_valid(fdold, O_RDONLY | O_RDWR))
|
||||
dup2_close(fdold, fdnew);
|
||||
else
|
||||
return (bad_fd(fdold));
|
||||
close(fdnew);
|
||||
/* return (bad_fd(fdold)); */
|
||||
return (0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/06 22:11:18 by jhalford #+# #+# */
|
||||
/* Updated: 2017/03/06 16:53:29 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/03/10 14:00:40 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -17,14 +17,14 @@ int redirect_lessand(t_redir *redir)
|
|||
int fdold;
|
||||
int fdnew;
|
||||
|
||||
if (ft_strcmp(redir->word, "-"))
|
||||
if (ft_strcmp(redir->word, "-") == 0)
|
||||
{
|
||||
close(redir->n);
|
||||
return (0);
|
||||
}
|
||||
if (!ft_stris(redir->word, ft_isdigit))
|
||||
{
|
||||
ft_dprintf(2, "%s: %s: can only be digits", SHELL_NAME, redir->word);
|
||||
ft_dprintf(2, "{red}%s: %s: can only be digits{eoc}\n", SHELL_NAME, redir->word);
|
||||
return (1);
|
||||
}
|
||||
fdold = ft_atoi(redir->word);
|
||||
|
|
@ -33,9 +33,10 @@ int redirect_lessand(t_redir *redir)
|
|||
return (0);
|
||||
if (fdold > 9)
|
||||
return (bad_fd(fdold));
|
||||
if (fd_is_valid(fdold, O_WRONLY))
|
||||
if (fd_is_valid(fdold, O_WRONLY | O_RDWR))
|
||||
dup2_close(fdold, fdnew);
|
||||
else
|
||||
return (bad_fd(fdold));
|
||||
close(fdnew);
|
||||
/* return (bad_fd(fdold)); */
|
||||
return (0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/12/03 11:56:58 by jhalford #+# #+# */
|
||||
/* Updated: 2017/03/08 23:34:08 by ariard ### ########.fr */
|
||||
/* Updated: 2017/03/10 13:45:47 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/11/28 19:26:32 by jhalford #+# #+# */
|
||||
/* Updated: 2017/03/10 12:12:26 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/03/10 13:48:20 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
|
||||
/* Updated: 2017/03/10 13:28:24 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/03/10 13:31:16 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/17 16:39:05 by ariard #+# #+# */
|
||||
/* Updated: 2017/03/10 13:19:14 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/03/10 13:45:42 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/03/08 16:21:05 by ariard #+# #+# */
|
||||
/* Updated: 2017/03/10 13:26:15 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/03/10 13:33:29 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue