From 35e4c2e23aef2913ea536e9e066a89df6eab5056 Mon Sep 17 00:00:00 2001 From: Tanguy MAZE Date: Thu, 10 Jan 2019 18:01:12 +0100 Subject: [PATCH] debug env list WIP --- Makefile | 4 +- includes/minishell.h | 10 +- srcs/cmd_echo.c | 4 +- srcs/exec.c | 58 +++++++++-- srcs/main.c | 234 +++++++++++++++++++++++-------------------- tests/a.out | Bin 8476 -> 0 bytes tests/main.c | 36 ------- 7 files changed, 183 insertions(+), 163 deletions(-) delete mode 100755 tests/a.out delete mode 100644 tests/main.c diff --git a/Makefile b/Makefile index d9706a8..70dc2da 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: tmaze +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2018/11/22 14:43:33 by tmaze #+# #+# # -# Updated: 2019/01/07 18:06:46 by tmaze ### ########.fr # +# Updated: 2019/01/10 14:44:04 by tmaze ### ########.fr # # # #******************************************************************************# @@ -16,7 +16,7 @@ CCSTD := NAME := minishell -SRCS := main.c exec.c cmd_echo.c cmd_cd.c +SRCS := main.c OBJS_DIR := objs OBJS := $(addprefix $(OBJS_DIR)/, $(SRCS:.c=.o)) INCLS := -Iincludes -Ilibft diff --git a/includes/minishell.h b/includes/minishell.h index 8f14843..b7f2bca 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -6,7 +6,7 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2018/11/18 13:12:34 by tmaze #+# #+# */ -/* Updated: 2019/01/08 17:38:25 by tmaze ### ########.fr */ +/* Updated: 2019/01/10 13:52:54 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,7 +20,7 @@ typedef struct s_builtin { char *cmd; - int (*f)(char **argv, char **envp); + int (*f)(char **argv, t_list *env); } t_builtin; typedef struct s_envelem @@ -29,8 +29,8 @@ typedef struct s_envelem char *val; } t_envelem; -int exec_cmd(char **argv, char **env); -int cmd_echo(char **argv, char **env); -int cmd_cd(char **argv, char **env); +int exec_cmd(char **argv, t_list *env); +int cmd_echo(char **argv, t_list *env); +int cmd_cd(char **argv, t_list *env); #endif diff --git a/srcs/cmd_echo.c b/srcs/cmd_echo.c index 154037c..02e5e0c 100644 --- a/srcs/cmd_echo.c +++ b/srcs/cmd_echo.c @@ -6,13 +6,13 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2018/11/27 16:14:07 by tmaze #+# #+# */ -/* Updated: 2018/11/27 17:29:35 by tmaze ### ########.fr */ +/* Updated: 2019/01/09 15:13:21 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -int cmd_echo(char **argv, char **env) +int cmd_echo(char **argv, t_list *env) { size_t i; diff --git a/srcs/exec.c b/srcs/exec.c index f1dbe40..aca44f9 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/07 18:57:22 by tmaze ### ########.fr */ +/* Updated: 2019/01/09 14:56:30 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,12 +14,46 @@ #define S_BIN 2 -int exec_cmd(char **argv, char **env) +char **envlsttotab(t_list *env) { - size_t i; - static t_builtin builtins[S_BIN] = {{"echo", &cmd_echo}, {"cd", &cmd_cd}}; + size_t i; + size_t env_size; + t_list *tmp; + char **ret; - /*, {"setenv", &cmd_senv}, {"unsetenv", &cmd_senv}, {"env", &cmd_env}}; */ + i = 0; + tmp = env; + env_size = ft_lstsize(env); + if ((ret = (char**)ft_memalloc(sizeof(char*) * (env_size + 1))) == NULL) + return (NULL); + while (i <= env_size) + ret[i++] = NULL; + i = 0; + while (tmp) + { + if ((ret[i] = ft_strnew(ft_strlen(((t_envelem*)(tmp->content))->key) + + ft_strlen(((t_envelem*)(tmp->content))->val) + 1)) == NULL) + { + ft_del_words_tables(&ret); + return (NULL); + } + i++; + tmp = tmp->next; + } + return (ret); +} + +/* +** , {"setenv", &cmd_senv}, {"unsetenv", &cmd_senv}, {"env", &cmd_env}}; +*/ + +int exec_cmd(char **argv, t_list *env) +{ + int ret; + char **env_tab; + size_t i; + static t_builtin builtins[S_BIN] = {{"echo", &cmd_echo}, + {"cd", &cmd_cd}}; i = 0; while (i < S_BIN) @@ -28,7 +62,15 @@ int exec_cmd(char **argv, char **env) return ((*(builtins[i].f))(argv, env)); i++; } - execve(argv[0], argv, env); - ft_putendl("minishell: error"); - return (1); + if ((env_tab = envlsttotab(env)) == NULL) + return (2); + if ((ret = fork()) == 0) + { + execve(argv[0], argv, env_tab); + ft_putendl("minishell: error"); + exit(-1); + } + waitpid(ret, NULL, 0); + ft_del_words_tables(&env_tab); + return (0); } diff --git a/srcs/main.c b/srcs/main.c index f3ff73d..cfe1609 100644 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,62 +6,12 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2018/11/18 13:09:55 by tmaze #+# #+# */ -/* Updated: 2019/01/08 18:33:40 by tmaze ### ########.fr */ +/* Updated: 2019/01/10 17:54:16 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; @@ -72,83 +22,147 @@ t_envelem *ft_envtoenvelem(char *env) return (NULL); while (env[i] && env[i] != '=') i++; - if ((ret->key = (char*)ft_strnew(i)) = NULL) + 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->value = (char*)ft_strnew(ft_strlen(ft_strrlen(env) - i - 1))) = NULL) + if ((ret->val = ft_strnew(ft_strlen(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); + 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); } -t_list *ft_envtolst(char **env) +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); } -int main(void) +void ft_envelemdel(t_envelem **env) { - char *cmd; - char **myenv; - char **tab_cmd; - t_list *lst_env; - int ret; - extern char **environ; + ft_strdel(&((*env)->key)); + ft_strdel(&((*env)->val)); + ft_memdel((void**)env); +} - lst_env = NULL; - if ((myenv = ft_strtabcpy(environ)) == NULL) +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]) { - ft_putendl("error alloc"); - return (2); + 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++; } - if ((lst_env = ft_strtabtolst(myenv)) == NULL) + 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_del_words_tables(&myenv); - ft_putendl("error alloc 2"); - return (2); + ft_putstr(((t_envelem*)(tmp->content))->key); + ft_putchar('='); + ft_putendl(((t_envelem*)(tmp->content))->val); + tmp = tmp->next; } - 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); + 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); +*/ diff --git a/tests/a.out b/tests/a.out deleted file mode 100755 index 3c20f02b1c78daff53ce93a10df126527d178999..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8476 zcmeHMO=uHA6rO0KL5oc<66+7!V#JEJRSNb{A&~~R*lKGliXcOiZrg=q6OxTKw?Y)G zp_03Z#iOU*yebvin|e?byeby-)Ep~`hC*^!BekpM)aqTL+jS^^tJ0j%yNP(PBCT>nPhKTXu zMjw-y)`sN>MFi)zF>j;gh(Di31t8z7><4a<<{fR_gv<4YXtU6LvHHeylCAu zt!ZvrGg*Nf_hUuo!=6Kc{W+W-=NJ1rAog`AJ{kA)(Ec^-tGmCReWhoPK_Q&aW6N=RO@LA5ljG_X$1aV)#g?wgrsCx%LX?86ZWUSoh!u zqB~HZo93S=6>KBZbFqikVJ4l?C&*yFoaXS?Eiw2}q8LyNCB5Kz2tIb= z^c00u`qx+3w|4R@CN?)-P@=Oh_44cR?bYgb^dY$!8(BJ9A`_q3j+$hvb8v2arO;@B z-iYaqmi`OCN8+`3=fyj5KUpaLr$W%i`+F;m42#k5)*Axt@Uu+gF_#j>fMP%~pcqgL zCc_4eO4X&suCe&#Ez8)rqTdo}}Aiy2`FP zwdNxfnWGD7d&Y4EINc-e;+Z*a%p0kqZP4BK6b5u=rc8@PoeRX}W0ESj0e4$K-1Ld> x3<=^)+SmX9 diff --git a/tests/main.c b/tests/main.c deleted file mode 100644 index ad90028..0000000 --- a/tests/main.c +++ /dev/null @@ -1,36 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* main.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: tmaze +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2018/11/23 14:24:53 by tmaze #+# #+# */ -/* Updated: 2018/11/26 12:50:19 by tmaze ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include -#include - -#include "../libft/libft.h" - -static void ft_cntdelstr(void* content, size_t content_size) -{ - ft_strdel((char**)content); - content_size = 0; -} - -int main(int argc, char **argv) -{ - extern char **environ; - t_list *lst; - int i; - - i = -1; - while (environ[++i]) - printf("%s\n", environ[i]); - if (argc > 1) - if ((lst = ft_strsplitstr2())) - return (0); -}