/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* main.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2018/11/18 13:09:55 by tmaze #+# #+# */ /* Updated: 2019/01/10 17:54:16 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++; ft_putstr("env: "); ft_putendl(env); ft_putstr("env_len: "); ft_putnbr(ft_strlen(env)); ft_putchar('\n'); 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_putstr("key: "); ft_putstrn(env, i); ft_putstr("\nkey_size: "); ft_putnbr(i); ft_putchar('\n'); ft_strlcpy(ret->key, env, i + 1); ft_putendl(ret->key); ft_putstr("val: "); ft_putstrn(&env[i + 1], ft_strlen(env) - i - 1); ft_putstr("\nval_size: "); ft_putnbr(ft_strlen(env) - i - 1); ft_putchar('\n'); ft_strlcpy(ret->val, &env[i + 1], ft_strlen(env) - i); ft_putendl(ret->val); 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(elem))) == 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); } int main(void) { t_list *lst_env; t_list *tmp; extern char **environ; if ((lst_env = ft_envtolst(environ)) == NULL) return (0); ft_putstr("list size: "); ft_putnbr(ft_lstsize(lst_env)); ft_putchar('\n'); tmp = lst_env; while (tmp) { ft_putstr(((t_envelem*)(tmp->content))->key); ft_putchar('='); ft_putendl(((t_envelem*)(tmp->content))->val); tmp = tmp->next; } ft_lstdel(&lst_env, &ft_lstdelenvelem); return (0); } /* ** char *cmd; ** char **tab_cmd; ** t_list *lst_env; ** int ret; ** extern char **environ; ** ** if ((lst_env = ft_envtolst(environ)) == NULL) ** ft_putendl("Error envtolst"); ** if (lst_env == NULL) ** return (2); ** while (1) ** { ** ret = 0; ** ft_putstr(FT_COLOR_GREEN); ** ft_putstr("$> "); ** ft_putstr(FT_RESET); ** ret = get_next_line(1, &cmd); ** if (ret == -1) ** { ** ft_lstdel(&lst_env, &ft_lstdelenvelem); ** ft_strdel(&cmd); ** return (2); ** } ** if (ft_strcmp("exit", cmd) == 0) ** { ** ft_lstdel(&lst_env, &ft_lstdelenvelem); ** ft_strdel(&cmd); ** return (0); ** } ** else if ((tab_cmd = ft_strsplit(cmd, ' ')) == NULL) ** { ** ft_lstdel(&lst_env, &ft_lstdelenvelem); ** ft_strdel(&cmd); ** ft_putendl("error split"); ** return (2); ** } ** exec_cmd(tab_cmd, lst_env); ** } ** ft_lstdel(&lst_env, &ft_lstdelenvelem); ** return (0); */