/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_p_lcom_next.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 "ft_s_struct.h" #include "ft_u_vars.h" char **ft_subst_vars(char *words[], t_msh *msh) { /* TODO: norme */ char **p_words; char *s_varname; char *varval; int64_t i; size_t varlen; p_words = words; varlen = 0; varval = NULL; s_varname = NULL; while (*p_words) { while ((i = ft_strlchr(*p_words, '$')) != -1) { varlen = i + 1; while ((*p_words)[varlen] != '\0' && (*p_words)[varlen] != '$') varlen += 1; if (!(s_varname = ft_substr(*p_words, (uint32_t)i, varlen - i))) return (NULL); varval = ft_subst_var_value(s_varname, msh); *p_words = ft_strsubst(*p_words, s_varname, varval); ft_memdel((void*)&s_varname); ft_memdel((void*)&varval); } p_words += 1; } return (words); } char **ft_subst_args(const char word[], int8_t redir) { /* TODO: norme */ char **words; char *subst; size_t i; if (redir == 0) { if (!(words = ft_split(word, ' '))) return (NULL); return (words); } i = 0; while (word[i] && !ft_ischarset("<>", word[i])) i++; if (redir > 0) { while (ft_isdigit(word[i])) i--; } if (!(subst = ft_substr(word, 0, i))) return (NULL); if (!(words = ft_split(subst, ' '))) { ft_memdel((void*)&subst); return (NULL); } ft_memdel((void*)&subst); return (words); }