diff options
author | JozanLeClerc <bousset.rudy@gmail.com> | 2020-09-20 18:33:13 +0200 |
---|---|---|
committer | JozanLeClerc <bousset.rudy@gmail.com> | 2020-09-20 18:33:13 +0200 |
commit | 6bbea3605494b5093e07423ebc4a52f1aecfb0e0 (patch) | |
tree | 69448c8f982398cac0ee225a13b0ca0ae4c48eb1 /src/p_redirs.c | |
parent | Better format (diff) | |
download | 42-minishell-6bbea3605494b5093e07423ebc4a52f1aecfb0e0.tar.gz 42-minishell-6bbea3605494b5093e07423ebc4a52f1aecfb0e0.tar.bz2 42-minishell-6bbea3605494b5093e07423ebc4a52f1aecfb0e0.tar.xz 42-minishell-6bbea3605494b5093e07423ebc4a52f1aecfb0e0.tar.zst 42-minishell-6bbea3605494b5093e07423ebc4a52f1aecfb0e0.zip |
Its going well
Diffstat (limited to 'src/p_redirs.c')
-rw-r--r-- | src/p_redirs.c | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/src/p_redirs.c b/src/p_redirs.c index 46d0397..2c9faa3 100644 --- a/src/p_redirs.c +++ b/src/p_redirs.c @@ -13,32 +13,32 @@ #include <libft.h> #include <stdint.h> #include <stddef.h> +#include <limits.h> #include "d_define.h" #include "s_lredir.h" #include "s_struct.h" #include "u_parse.h" -static int32_t p_get_fd(char word, char *ptr) +static int32_t p_get_fd(char word[], char *ptr) { char digit[255]; char *tmp; + if (*ptr == '<' || (ptr - word) == 1) + return (0); tmp = ptr; + tmp -= 1; + if (ft_isdigit(*tmp) == FALSE) + return (0); while ((tmp - word) > 0 && ft_isdigit(*tmp) == TRUE) tmp--; - if ((tmp - word) != 0 && ft_iswhitespace(*tmp) == FALSE) - { + if ((tmp - word) > 0 && ft_iswhitespace(*tmp) == FALSE) return (0); - } else { - while (tmp != ptr) - { - digit[tmp - word] = *tmp; - tmp++; - } - digit[tmp - word] = C_NUL; + tmp += ((tmp - word) > 0) ? (1) : (0); + ft_strlcpy(digit, word + (tmp - word), (ptr - tmp) + 1); } return (ft_atoi(digit)); } @@ -46,20 +46,29 @@ static int32_t p_get_fd(char word, char *ptr) static int8_t p_get_redir(char word[], char *ptr, t_com *com) { struct s_lredir *rdr; - const int32_t fd = p_get_fd(word, ptr); + /* char path[PATH_MAX]; */ + size_t pos[2]; + int32_t fd; int8_t redir; + if ((fd = p_get_fd(word, ptr)) < 0) + fd = 0; redir = (*ptr == '>') ? (1) : (-1); redir = (redir == 1 && *(ptr + 1) == '>') ? (2) : (redir); redir = (redir == -1 && *(ptr + 1) == '<') ? (-2) : (redir); + if (fd == 0) + pos[0] = (ptr - word); + else + pos[0] = (ptr - word) - ft_intlen(fd); + /* p_get_path(path, ptr, word); */ + /* ft_printf("fd: %d redir: %hhd path: [%s]\n", fd, redir, path); */ (void)com; (void)rdr; return (0); } -int8_t p_redirs(char word[], t_com *com) +int8_t p_redirs(char word[], t_com **com) { - struct s_com *com_ptr; char *ptr; t_quote_mode mode; @@ -73,7 +82,7 @@ int8_t p_redirs(char word[], t_com *com) mode = u_meet_squote(word, ptr, mode); else if (mode == Q_NONE && (*ptr == '<' || *ptr == '>') == 1) { - if (p_get_redir(word, ptr, com) != 0) + if (p_get_redir(word, ptr, *com) != 0) return (1); ptr = word; } |