/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* main.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2018/11/18 13:09:55 by tmaze #+# #+# */ /* Updated: 2019/01/08 18:33:40 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" char **ft_strtabcpy(char **tab) { char **ret; size_t size_tab; size_tab = 0; while (tab[size_tab]) size_tab++; if ((ret = (char**)ft_memalloc(sizeof(char*) * size_tab)) == NULL) return (NULL); size_tab = 0; while (tab[size_tab]) { if ((ret[size_tab] = ft_strdup(tab[size_tab])) == NULL) { ft_del_words_tables(&ret); break ; } size_tab++; } return (ret); } void ft_lstdelstr(void *content, size_t content_size) { content_size = 0; ft_strdel((void*)&content); } t_list *ft_strtabtolst(char **tab) { t_list *ret; t_list *new; size_t i; i = 0; ret = NULL; while (tab[i]) { if ((new = ft_lstnew(tab[i], ft_strlen(tab[i]))) == NULL) { ft_lstdel(&ret, &ft_lstdelstr); return (NULL); } ft_lstaddend(&ret, new); i++; } return (ret); } 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 = (char*)ft_strnew(i)) = NULL) { ft_memdel((void**)&ret); return (NULL); } if ((ret->value = (char*)ft_strnew(ft_strlen(ft_strrlen(env) - i - 1))) = NULL) { ft_memdel((void**)&ret); return (NULL); } ft_strlcpy(ret->key, env, i); ft_strlcpy(ret->key, env + i + 1, ft_strrlen(env) - i - 1); return (&ret); } t_list *ft_envtolst(char **env) { } int main(void) { char *cmd; char **myenv; char **tab_cmd; t_list *lst_env; int ret; extern char **environ; lst_env = NULL; if ((myenv = ft_strtabcpy(environ)) == NULL) { ft_putendl("error alloc"); return (2); } if ((lst_env = ft_strtabtolst(myenv)) == NULL) { ft_del_words_tables(&myenv); ft_putendl("error alloc 2"); return (2); } ft_del_words_tables(&myenv); 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_lstdelstr); ft_strdel(&cmd); return (2); } if (ft_strcmp("exit", cmd) == 0) { ft_lstdel(&lst_env, &ft_lstdelstr); ft_strdel(&cmd); return (0); } else if ((tab_cmd = ft_strsplit(cmd, ' ')) == NULL) { ft_lstdel(&lst_env, &ft_lstdelstr); ft_strdel(&cmd); ft_putendl("error split"); return (2); } if ((ret = fork()) == 0) exit(exec_cmd(tab_cmd, myenv)); else { waitpid(ret, NULL, 0); ft_strdel(&cmd); ft_del_words_tables(&tab_cmd); } } ft_lstdel(&lst_env, &ft_lstdelstr); return (0); }