/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* main.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2018/11/18 13:09:55 by tmaze #+# #+# */ /* Updated: 2019/01/13 16:59:24 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)); if ((((t_envelem*)(content))->key) != NULL || (((t_envelem*)(content))->val) != NULL) ft_putstr("plup\n"); 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_memdel((void**)&elem); if (ft_lstaddend(&ret, new) == NULL) { ft_lstdel(&ret, &ft_lstdelenvelem); return (NULL); } i++; } return (ret); } int main(void) { int ret; char *cmd; char **tab_cmd; t_list *lst_env; 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); } ft_strdel(&cmd); exec_cmd(tab_cmd, &lst_env); ft_del_words_tables(&tab_cmd); } 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); */