/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_p_lcom.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: rbousset +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */ /* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #include #include #include #include #include #include "ft_s_lcom.h" #include "ft_s_struct.h" static void ft_rdr_err_check(char *ptr, t_lcom **link) { if ((*link)->redir == -1 && ft_ischarset(">", *(ptr + 1))) { /* TODO: syntax err */ } else if ((*link)->redir == 1 && ft_ischarset("<", *(ptr + 1))) { } else if ((*link)->redir == 2 && ft_ischarset("<>", *(ptr + 1))) { } } static int8_t ft_get_rdrpath(char *ptr, t_lcom **link) { char *p_rdrpath; ptr += ((*link)->redir == 2) ? (2) : (1); if (!((*link)->rdrpath = (char*)malloc((ft_strlen(ptr) + 1) * sizeof(char)))) { return (-1); } p_rdrpath = (*link)->rdrpath; while (*ptr) { if (*ptr != ' ') { *p_rdrpath = *ptr; p_rdrpath++; } ptr++; } *p_rdrpath = '\0'; ft_printf("[%s]\n", (*link)->rdrpath); return (0); } int8_t ft_get_redir(const char word[], t_lcom **link) { char *ptr; ptr = (char *)word; while (*ptr) { if (*ptr == '<') { (*link)->redir = -1; break ; } if (*ptr == '>') { (*link)->redir = (*(ptr + 1) == '>') ? (2) : (1); break ; } ptr++; /* TODO: handle correctly multiples "msh ~> echo qwe > qwe > asd >> zxc > qweasdzxc" */ /* hint: bash only handles the last onke */ } if ((*link)->redir != 0) { ft_rdr_err_check(ptr, link); if (ft_get_rdrpath(ptr, link) != 0) return (-1); } return (0); } int8_t ft_p_lcom(const char line[], const uint64_t count, t_msh *msh) { uint64_t i; t_lcom *link; char **words; i = 0; if (!(words = ft_split(line, ';'))) return (-1); while (i <= count) { if (!(link = ft_lcom_new(words[i]))) { return (-1); } ft_lcom_add_back(&msh->curr, link); i++; } ft_delwords(words); return (0); }