/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* p_lblock.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 "d_define.h" #include "d_enum.h" #include "f_fail.h" #include "p_split.h" #include "s_line.h" #include "s_lpipes.h" #include "s_struct.h" #include "u_parse.h" #include "u_utils.h" static unsigned char p_get_nextif(char *words[], size_t i) { unsigned char nextif; nextif = 0; if (words[i][ft_strlen(words[i]) - 1] == '0') nextif = 0; else if (words[i][ft_strlen(words[i]) - 1] == '1') nextif = 1; else nextif = 2; words[i][ft_strlen(words[i]) - 1] = '\0'; return (nextif); } t_bool p_find_good_pipe(const char word[]) { char *ptr; t_quote_mode mode; mode = Q_NONE; ptr = (char*)word; while (*ptr != C_NUL) { if (*ptr == C_PIPE) { if (mode == Q_NONE && u_is_not_escaped(word, ptr) == TRUE && *(ptr + 1) != C_PIPE && *(ptr - 1) != C_PIPE) return (TRUE); } if (*ptr == C_DQUOTE) mode = u_meet_dquote(word, ptr, mode); else if (*ptr == C_SQUOTE) mode = u_meet_squote(word, ptr, mode); ptr++; } return (FALSE); } static char p_loop(char *words[], t_msh *msh) { t_line_block *link; size_t i; unsigned char nextif; i = 0; while (words[i] != NULL) { nextif = p_get_nextif(words, i); if ((link = s_line_new(words[i], nextif)) == NULL) return (-1); s_line_add_back(&msh->curr, link); i++; } return (0); } char p_line_block(const char line[], t_msh *msh) { char **words; if ((words = p_split_line((char*)line)) == NULL) return (-1); if (p_loop(words, msh) != 0) { ft_delwords(words); return (-1); } ft_delwords(words); return (0); }