/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ms_env2.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/02/01 10:18:01 by tmaze #+# #+# */ /* Updated: 2019/02/01 11:16:28 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" t_envelem *ft_envtoenvelem(char *env) { size_t i; t_envelem *ret; i = 0; if ((ret = (t_envelem*)ft_memalloc(sizeof(t_envelem))) == NULL) return (NULL); while (env[i] && env[i] != '=') i++; if ((ret->key = ft_strnew(i)) == NULL) { ft_memdel((void**)&ret); return (NULL); } if ((ret->val = ft_strnew(ft_strlen(env) - i - 1)) == NULL) { ft_memdel((void**)&ret); return (NULL); } ft_strlcpy(ret->key, env, i + 1); ft_strlcpy(ret->val, &env[i + 1], ft_strlen(env) - i); return (ret); } void ft_lstdelenvelem(void *content, size_t size) { size = 0; ft_strdel(&(((t_envelem*)(content))->key)); ft_strdel(&(((t_envelem*)(content))->val)); ft_memdel(&content); } void ft_envelemdel(t_envelem **env) { ft_strdel(&((*env)->key)); ft_strdel(&((*env)->val)); ft_memdel((void**)env); } t_list *ft_envtolst(char **env) { size_t i; t_list *ret; t_list *new; t_envelem *elem; ret = NULL; i = 0; while (env[i]) { if ((elem = ft_envtoenvelem(env[i])) == NULL) ft_lstdel(&ret, &ft_lstdelenvelem); if (elem == NULL) return (NULL); if ((new = ft_lstnew((void*)elem, sizeof(t_envelem))) == NULL) { ft_envelemdel(&elem); ft_lstdel(&ret, &ft_lstdelenvelem); return (NULL); } ft_envelemdel(&elem); if (ft_lstaddend(&ret, new) == NULL) { ft_lstdel(&ret, &ft_lstdelenvelem); return (NULL); } i++; } return (ret); }