/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_s_lvars.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 "ft_s_struct.h" void ft_lvars_rebind(t_lvars **lvars, const char name[], const char newval[]) { t_lvars *tmp; tmp = *lvars; while (tmp && ft_strncmp(tmp->name, name, ft_strlen(name))) { tmp = tmp->next; } if (tmp == NULL) { return ; } ft_memdel((void*)&tmp->val); if (!(tmp->val = ft_strdup(newval))) { ft_dprintf(STDERR_FILENO, "%s\n", strerror(errno)); exit(FT_RET_ALLOC); } } void ft_lvars_delone(t_lvars **lvars, const char name[]) { t_lvars *tmp; t_lvars *prev; tmp = *lvars; if (tmp != NULL && !ft_strncmp(tmp->name, name, ft_strlen(name))) { *lvars = tmp->next; ft_memdel((void*)&tmp->name); ft_memdel((void*)&tmp->val); ft_memdel((void*)&tmp); return ; } while (tmp && ft_strncmp(tmp->name, name, ft_strlen(name))) { prev = tmp; tmp = tmp->next; } if (tmp == NULL) return ; prev->next = tmp->next; ft_memdel((void*)&tmp->name); ft_memdel((void*)&tmp->val); ft_memdel((void*)&tmp); } void ft_lvars_add_front(t_lvars **alvars, t_lvars *new) { if (!alvars || !new) { return ; } new->next = *alvars; *alvars = new; } void ft_lvars_clear(t_lvars **lvars) { t_lvars *tmp; t_lvars *renext; if (!lvars) return ; tmp = *lvars; while (tmp) { renext = tmp->next; ft_memdel((void*)&tmp->name); ft_memdel((void*)&tmp->val); ft_memdel((void*)&tmp); tmp = renext; } *lvars = NULL; } t_lvars *ft_lvars_new(const char name[], const char val[]) { t_lvars *link; if (!(link = (t_lvars*)malloc(sizeof(t_lvars)))) { return (NULL); } if (!(link->name = ft_strdup(name))) { return (NULL); } if (!(link->val = ft_strdup(val))) { return (NULL); } link->next = NULL; return (link); }