/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* main.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2018/11/18 13:09:55 by tmaze #+# #+# */ /* Updated: 2018/11/27 17:52:17 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); } int main(void) { char *cmd; char **myenv; char **tab_cmd; int ret; extern char **environ; if ((myenv = ft_strtabcpy(environ)) == NULL) { ft_putendl("error alloc"); 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_memdel((void*)&myenv); ft_strdel(&cmd); return (2); } if (ft_strcmp("exit", cmd) == 0) { ft_memdel((void*)&myenv); ft_strdel(&cmd); return (0); } else if ((tab_cmd = ft_strsplit(cmd, ' ')) == NULL) { ft_memdel((void*)&myenv); 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_strdel((void*)&myenv); return (0); }