From b60be696b05ae0ccc6bbfef4d92dc0398bb63aa7 Mon Sep 17 00:00:00 2001 From: Tanguy MAZE Date: Sat, 12 Jan 2019 17:58:43 +0100 Subject: [PATCH] added full chained list env --- Makefile | 4 +-- srcs/exec.c | 12 ++++++--- srcs/main.c | 71 ++++++++++++++++++++++++++++++----------------------- 3 files changed, 51 insertions(+), 36 deletions(-) diff --git a/Makefile b/Makefile index 70dc2da..054d55f 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: tmaze +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2018/11/22 14:43:33 by tmaze #+# #+# # -# Updated: 2019/01/10 14:44:04 by tmaze ### ########.fr # +# Updated: 2019/01/12 15:37:35 by tmaze ### ########.fr # # # #******************************************************************************# @@ -16,7 +16,7 @@ CCSTD := NAME := minishell -SRCS := main.c +SRCS := main.c exec.c cmd_echo.c cmd_cd.c OBJS_DIR := objs OBJS := $(addprefix $(OBJS_DIR)/, $(SRCS:.c=.o)) INCLS := -Iincludes -Ilibft diff --git a/srcs/exec.c b/srcs/exec.c index aca44f9..4024d8a 100644 --- a/srcs/exec.c +++ b/srcs/exec.c @@ -6,7 +6,7 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2018/11/27 15:32:29 by tmaze #+# #+# */ -/* Updated: 2019/01/09 14:56:30 by tmaze ### ########.fr */ +/* Updated: 2019/01/12 17:54:54 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ @@ -63,13 +63,19 @@ int exec_cmd(char **argv, t_list *env) i++; } if ((env_tab = envlsttotab(env)) == NULL) - return (2); + return (-1); if ((ret = fork()) == 0) { execve(argv[0], argv, env_tab); - ft_putendl("minishell: error"); + ft_putendl_fd("minishell: error", 2); + ft_del_words_tables(&env_tab); exit(-1); } + else if (ret == -1) + { + ft_putendl_fd("minishell: error", 2); + return (-1); + } waitpid(ret, NULL, 0); ft_del_words_tables(&env_tab); return (0); diff --git a/srcs/main.c b/srcs/main.c index cfe1609..c564eef 100644 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,7 +6,7 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2018/11/18 13:09:55 by tmaze #+# #+# */ -/* Updated: 2019/01/10 17:54:16 by tmaze ### ########.fr */ +/* Updated: 2019/01/12 17:26:33 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,11 +22,6 @@ t_envelem *ft_envtoenvelem(char *env) 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); @@ -37,20 +32,8 @@ t_envelem *ft_envtoenvelem(char *env) 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); } @@ -59,6 +42,9 @@ 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); } @@ -84,13 +70,13 @@ t_list *ft_envtolst(char **env) ft_lstdel(&ret, &ft_lstdelenvelem); if (elem == NULL) return (NULL); - if ((new = ft_lstnew((void*)elem, sizeof(elem))) == NULL) + if ((new = ft_lstnew((void*)elem, sizeof(t_envelem))) == NULL) { ft_envelemdel(&elem); ft_lstdel(&ret, &ft_lstdelenvelem); return (NULL); } - ft_envelemdel(&elem); + ft_memdel((void**)&elem); if (ft_lstaddend(&ret, new) == NULL) { ft_lstdel(&ret, &ft_lstdelenvelem); @@ -103,22 +89,45 @@ t_list *ft_envtolst(char **env) int main(void) { + int ret; + char *cmd; + char **tab_cmd; 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_putendl("Error envtolst"); + if (lst_env == NULL) + return (2); + while (1) { - ft_putstr(((t_envelem*)(tmp->content))->key); - ft_putchar('='); - ft_putendl(((t_envelem*)(tmp->content))->val); - tmp = tmp->next; + 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);