/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ms_env.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/09/20 11:43:53 by tmaze #+# #+# */ /* Updated: 2019/10/18 14:20:41 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" void lstdelelem(t_env **elem) { if (elem) { ft_strdel(&((*elem)->key)); ft_strdel(&((*elem)->val)); ft_memdel((void**)elem); } } void lstdel(t_env **env) { t_env *tmp; while (*env) { tmp = *env; *env = (*env)->next; lstdelelem(&tmp); } } t_env *lstnew(char *env) { t_env *ret; int i; i = 0; ret = NULL; while (env[i] && env[i] != '=') i++; if (env[i] == '=' && (ret = (t_env*)ft_memalloc(sizeof(t_env))) != NULL) if ((ret->val = ft_strsub(env, i + 1, ft_strlen(env) - i - 1)) == NULL || (ret->key = ft_strsub(env, 0, i)) == NULL) lstdelelem(&ret); return (ret); } t_env *lstaddend(t_env **alst, t_env *new) { t_env *tmp; if (new == NULL) return (NULL); if (*alst == NULL) *alst = new; else { tmp = *alst; while (tmp->next) tmp = tmp->next; tmp->next = new; } return (*alst); } t_env *lstgetelem(char *key, t_env *env) { t_env *it; it = env; while (it && !ft_strequ(it->key, key)) it = it->next; return (it); } char **lsttotab(t_env *env) { t_env *it; char *new; char **ret; size_t size; int i; i = 0; ret = NULL; it = env; while (it) { i++; it = it->next; } if ((ret = (char**)ft_memalloc(sizeof(char*) * (i + 1))) == NULL) return (NULL); while (i >= 0) ret[i--] = NULL; it = env; i = 0; while (it) { size = ft_strlen(it->key) + ft_strlen(it->val) + 1; if ((new = ft_strnew(size)) == NULL) { ft_del_words_tables(&ret); break ; } ft_strlcpy(new, it->key, size); ft_strlcat(new, "=", size); ft_strlcat(new, it->val, size); ret[i++] = new; it = it->next; } return (ret); }