diff options
Diffstat (limited to 'src/ft_p_lcom.c')
-rw-r--r-- | src/ft_p_lcom.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/ft_p_lcom.c b/src/ft_p_lcom.c index 7a19bd6..ee2ec89 100644 --- a/src/ft_p_lcom.c +++ b/src/ft_p_lcom.c @@ -16,6 +16,8 @@ #include <fcntl.h> #include <unistd.h> #include <errno.h> + +#include "ft_f_fail.h" #include "ft_s_lcom.h" #include "ft_s_struct.h" @@ -29,9 +31,11 @@ static void } else if ((*link)->redir == 1 && ft_ischarset("<", *(ptr + 1))) { + /* TODO: syntax err */ } else if ((*link)->redir == 2 && ft_ischarset("<>", *(ptr + 1))) { + /* TODO: syntax err */ } } @@ -61,10 +65,28 @@ static int8_t return (0); } +static void + ft_get_rdrfd(const char *ptr, + t_lcom **link) +{ + while (ft_isdigit(*ptr)) + { + ptr--; + } + if (*ptr != ' ') + (*link)->rdrfd = STDOUT_FILENO; + else + { + ptr += 1; + (*link)->rdrfd = ft_atoi(ptr); + } +} + int8_t ft_get_redir(const char word[], t_lcom **link) { + /* TODO: norme */ char *ptr; ptr = (char *)word; @@ -84,8 +106,12 @@ int8_t /* TODO: handle correctly multiples "msh ~> echo qwe > qwe > asd >> zxc > qweasdzxc" */ /* hint: bash only handles the last onke */ } - if ((*link)->redir != 0) + if ((*link)->redir > 0) { + if (ft_isdigit(*(ptr - 1))) + ft_get_rdrfd(ptr - 1, link); + else + (*link)->rdrfd = STDOUT_FILENO; ft_rdr_err_check(ptr, link); if (ft_get_rdrpath(ptr, link) != 0) return (-1); |