/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ms_env.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/01/13 14:44:20 by tmaze #+# #+# */ /* Updated: 2019/01/25 16:05:29 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" t_envelem *elem_new(char *key, char *val) { t_envelem *elem; if ((elem = (t_envelem*)ft_memalloc(sizeof(t_envelem))) == NULL) return (NULL); if ((elem->key = ft_strdup(key)) == NULL) { ft_memdel((void**)&elem); return (NULL); } if (val != NULL && (elem->val = ft_strdup(val)) == NULL) { ft_strdel(&(elem->key)); ft_memdel((void**)&elem); return (NULL); } elem->val = (val == NULL) ? NULL : elem->val; return (elem); } t_envelem *env_getelemfromkey(char *key, t_list *env) { t_list *tmp; tmp = env; while (tmp) { if (ft_strcmp(((t_envelem*)(tmp->content))->key, key) == 0) return ((t_envelem*)(tmp->content)); tmp = tmp->next; } return (NULL); } t_envelem *env_addupdate(char *key, char *val, t_list **env) { t_list *new; t_envelem *elem; char *tmp; if ((elem = env_getelemfromkey(key, *env)) != NULL) { if (val == NULL) tmp = val; else if ((tmp = ft_strdup(val)) == NULL) return (NULL); ft_strdel(&(elem->val)); elem->val = tmp; return (elem); } if ((elem = elem_new(key, val)) == NULL || (new = ft_lstnew(elem, sizeof(t_envelem))) == NULL) return (NULL); ft_lstaddend(env, new); ft_memdel((void**)&elem); return ((t_envelem*)(new->content)); } void env_delelem(char *key, t_list **env) { t_list *tmp; t_list *prec; if (ft_strcmp(((t_envelem*)((*env)->content))->key, key) == 0) { tmp = *env; *env = (*env)->next; ft_lstdelone(&tmp, &ft_lstdelenvelem); return ; } tmp = (*env)->next; prec = (*env); while (tmp) { if (ft_strcmp(((t_envelem*)(tmp->content))->key, key) == 0) { prec->next = tmp->next; ft_lstdelone(&tmp, &ft_lstdelenvelem); return ; } prec = tmp; tmp = tmp->next; } }