diff options
Diffstat (limited to 'src/m_redirs.c')
-rw-r--r-- | src/m_redirs.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/m_redirs.c b/src/m_redirs.c new file mode 100644 index 0000000..2414dcd --- /dev/null +++ b/src/m_redirs.c @@ -0,0 +1,51 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* m_redirs.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */ +/* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include <fcntl.h> +#include <unistd.h> +#include <errno.h> + +#include "f_fail.h" +#include "s_destroy.h" +#include "s_lcom.h" +#include "s_struct.h" + +void + dup_redirs(const t_lcom *ptr, + t_msh *msh) +{ + int32_t fd; + + if (ptr->redir == -1) + { + if ((fd = open(ptr->rdrpath, O_RDONLY)) == -1) + f_redir(ptr->rdrpath, msh); + dup2(fd, STDIN_FILENO); + close(fd); + } + if (ptr->redir == 1) + { + if ((fd = open(ptr->rdrpath, + O_CREAT | O_TRUNC | O_WRONLY, 0644)) == -1) + f_redir(ptr->rdrpath, msh); + dup2(fd, ptr->rdrfd); + close(fd); + } + if (ptr->redir == 2) + { + if ((fd = open(ptr->rdrpath, + O_CREAT | O_APPEND | O_WRONLY, 0644)) == -1) + f_redir(ptr->rdrpath, msh); + dup2(fd, ptr->rdrfd); + close(fd); + } +} |