added full chained list env

This commit is contained in:
Tanguy MAZE 2019-01-12 17:58:43 +01:00
parent 35e4c2e23a
commit b60be696b0
3 changed files with 51 additions and 36 deletions

View File

@ -6,7 +6,7 @@
# By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ # # By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2018/11/22 14:43:33 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 NAME := minishell
SRCS := main.c SRCS := main.c exec.c cmd_echo.c cmd_cd.c
OBJS_DIR := objs OBJS_DIR := objs
OBJS := $(addprefix $(OBJS_DIR)/, $(SRCS:.c=.o)) OBJS := $(addprefix $(OBJS_DIR)/, $(SRCS:.c=.o))
INCLS := -Iincludes -Ilibft INCLS := -Iincludes -Ilibft

View File

@ -6,7 +6,7 @@
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */ /* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2018/11/27 15:32:29 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++; i++;
} }
if ((env_tab = envlsttotab(env)) == NULL) if ((env_tab = envlsttotab(env)) == NULL)
return (2); return (-1);
if ((ret = fork()) == 0) if ((ret = fork()) == 0)
{ {
execve(argv[0], argv, env_tab); execve(argv[0], argv, env_tab);
ft_putendl("minishell: error"); ft_putendl_fd("minishell: error", 2);
ft_del_words_tables(&env_tab);
exit(-1); exit(-1);
} }
else if (ret == -1)
{
ft_putendl_fd("minishell: error", 2);
return (-1);
}
waitpid(ret, NULL, 0); waitpid(ret, NULL, 0);
ft_del_words_tables(&env_tab); ft_del_words_tables(&env_tab);
return (0); return (0);

View File

@ -6,7 +6,7 @@
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */ /* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2018/11/18 13:09:55 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); return (NULL);
while (env[i] && env[i] != '=') while (env[i] && env[i] != '=')
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) if ((ret->key = ft_strnew(i)) == NULL)
{ {
ft_memdel((void**)&ret); ft_memdel((void**)&ret);
@ -37,20 +32,8 @@ t_envelem *ft_envtoenvelem(char *env)
ft_memdel((void**)&ret); ft_memdel((void**)&ret);
return (NULL); 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_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_strlcpy(ret->val, &env[i + 1], ft_strlen(env) - i);
ft_putendl(ret->val);
return (ret); return (ret);
} }
@ -59,6 +42,9 @@ void ft_lstdelenvelem(void *content, size_t size)
size = 0; size = 0;
ft_strdel(&(((t_envelem*)(content))->key)); ft_strdel(&(((t_envelem*)(content))->key));
ft_strdel(&(((t_envelem*)(content))->val)); ft_strdel(&(((t_envelem*)(content))->val));
if ((((t_envelem*)(content))->key) != NULL
|| (((t_envelem*)(content))->val) != NULL)
ft_putstr("plup\n");
ft_memdel(&content); ft_memdel(&content);
} }
@ -84,13 +70,13 @@ t_list *ft_envtolst(char **env)
ft_lstdel(&ret, &ft_lstdelenvelem); ft_lstdel(&ret, &ft_lstdelenvelem);
if (elem == NULL) if (elem == NULL)
return (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_envelemdel(&elem);
ft_lstdel(&ret, &ft_lstdelenvelem); ft_lstdel(&ret, &ft_lstdelenvelem);
return (NULL); return (NULL);
} }
ft_envelemdel(&elem); ft_memdel((void**)&elem);
if (ft_lstaddend(&ret, new) == NULL) if (ft_lstaddend(&ret, new) == NULL)
{ {
ft_lstdel(&ret, &ft_lstdelenvelem); ft_lstdel(&ret, &ft_lstdelenvelem);
@ -103,22 +89,45 @@ t_list *ft_envtolst(char **env)
int main(void) int main(void)
{ {
int ret;
char *cmd;
char **tab_cmd;
t_list *lst_env; t_list *lst_env;
t_list *tmp;
extern char **environ; extern char **environ;
if ((lst_env = ft_envtolst(environ)) == NULL) if ((lst_env = ft_envtolst(environ)) == NULL)
return (0); ft_putendl("Error envtolst");
ft_putstr("list size: "); if (lst_env == NULL)
ft_putnbr(ft_lstsize(lst_env)); return (2);
ft_putchar('\n'); while (1)
tmp = lst_env;
while (tmp)
{ {
ft_putstr(((t_envelem*)(tmp->content))->key); ret = 0;
ft_putchar('='); ft_putstr(FT_COLOR_GREEN);
ft_putendl(((t_envelem*)(tmp->content))->val); ft_putstr("$> ");
tmp = tmp->next; 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); ft_lstdel(&lst_env, &ft_lstdelenvelem);
return (0); return (0);