diff --git a/headers/minishell_prototypes.h b/headers/minishell_prototypes.h index 23b568e..660f11a 100644 --- a/headers/minishell_prototypes.h +++ b/headers/minishell_prototypes.h @@ -6,7 +6,7 @@ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/10/08 02:59:58 by lperrey #+# #+# */ -/* Updated: 2021/10/22 10:41:34 by lperrey ### ########.fr */ +/* Updated: 2021/10/23 15:19:42 by lperrey ### ########.fr */ /* */ /* ************************************************************************** */ @@ -36,5 +36,8 @@ char *ft_strjoinfree_s1(char *s1, const char *s2); char *ft_strjoinfree_s2(const char *s1, char *s2); void ft_lstprint(t_list *lst, int fd); int ft_isinset_str(char *str, char *set); +size_t ft_2d_arrlen(void *ptr); // Replace ft_arrlen() +void *ft_dup_2d_arr(void *ptr); +void *ft_resize_2d_arr(void *ptr, size_t add_nbr); #endif diff --git a/headers/minishell_structs.h b/headers/minishell_structs.h index 6b4f46a..071c54a 100644 --- a/headers/minishell_structs.h +++ b/headers/minishell_structs.h @@ -6,7 +6,7 @@ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/10/08 02:35:52 by lperrey #+# #+# */ -/* Updated: 2021/10/19 20:20:35 by lperrey ### ########.fr */ +/* Updated: 2021/10/22 12:41:17 by lperrey ### ########.fr */ /* */ /* ************************************************************************** */ @@ -42,6 +42,7 @@ typedef struct s_all char *prompt_base; char *prompt; t_token *token_list; + int last_exit_status; } t_all; #endif diff --git a/libft b/libft index 1401fdd..1e8aaa7 160000 --- a/libft +++ b/libft @@ -1 +1 @@ -Subproject commit 1401fddfcd177d8794d41a8c7dd3b806bbb5057f +Subproject commit 1e8aaa7154cbae5f7a200ca20323ece66c99fdd3 diff --git a/srcs/builtins/exit.c b/srcs/builtins/exit.c index c51aaf2..71e09f7 100644 --- a/srcs/builtins/exit.c +++ b/srcs/builtins/exit.c @@ -6,7 +6,7 @@ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/10/10 05:01:22 by lperrey #+# #+# */ -/* Updated: 2021/10/15 08:45:33 by lperrey ### ########.fr */ +/* Updated: 2021/10/22 14:49:01 by lperrey ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,8 +17,7 @@ int builtin_exit(int argc, char *argv[], t_all *c) // WIP unsigned char status; int i; - status = 0; // # should not return '0' by default, but the last exit code value (same as $?) - // status = c->last_exit_value; // LIKE THIS + status = c->last_exit_status; if (argc > 2) return (ft_reti_print(1, "exit: too many arguments\n", 2)); if (argc == 2) diff --git a/srcs/free.c b/srcs/free.c index ce0826e..b2b6468 100644 --- a/srcs/free.c +++ b/srcs/free.c @@ -6,7 +6,7 @@ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/10/10 23:53:17 by lperrey #+# #+# */ -/* Updated: 2021/10/10 23:59:25 by lperrey ### ########.fr */ +/* Updated: 2021/10/22 13:35:33 by lperrey ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,5 +16,7 @@ int free_exit(t_all *c, int exit_status) { free(c->prompt_base); free(c->prompt); + ft_lstclear((t_list **)&c->token_list, free); // a voir avec Hugo, il y a un truc qui me semble superflu dans la fonction exit(exit_status); + ft_free_2d_arr(c->envp); } diff --git a/srcs/generic.c b/srcs/generic.c index 193aacc..43f2b9c 100644 --- a/srcs/generic.c +++ b/srcs/generic.c @@ -6,7 +6,7 @@ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/10/08 09:25:35 by lperrey #+# #+# */ -/* Updated: 2021/10/21 18:23:04 by lperrey ### ########.fr */ +/* Updated: 2021/10/23 15:19:07 by lperrey ### ########.fr */ /* */ /* ************************************************************************** */ @@ -72,3 +72,53 @@ int ft_isinset_str(char *str, char *set) } return (i); } + +size_t ft_2d_arrlen(void *ptr) // Replace ft_arrlen() +{ + size_t len; + char **arr; + + arr = (char **)ptr; + len = 0; + while (arr[len] != NULL) + len++; + return (len); +} + +void *ft_dup_2d_arr(void *ptr) +{ + unsigned int i; + char **arr; + char **new_arr; + + new_arr = malloc((ft_2d_arrlen(ptr) + 1) * sizeof (void *)); + if (!new_arr) + return (NULL); + arr = (char **)ptr; + i = 0; + while (arr[i]) + { + new_arr[i] = arr[i]; + i++; + } + new_arr[i] = NULL; + return (new_arr); +} + +void *ft_resize_2d_arr(void *ptr, size_t add_nbr) +{ + unsigned int i; + char **arr; + char **new_arr; + + new_arr = ft_calloc(ft_2d_arrlen(ptr) + add_nbr + 1, sizeof (void *)); + arr = (char **)ptr; + i = 0; + while (arr[i]) + { + new_arr[i] = arr[i]; + i++; + } + free(arr); + return (new_arr); +} diff --git a/srcs/init.c b/srcs/init.c index 31c6122..6264069 100644 --- a/srcs/init.c +++ b/srcs/init.c @@ -6,7 +6,7 @@ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/10/08 09:22:12 by lperrey #+# #+# */ -/* Updated: 2021/10/19 11:58:13 by lperrey ### ########.fr */ +/* Updated: 2021/10/23 16:04:03 by lperrey ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,7 +18,9 @@ static char *init_prompt(char *prompt_base); int init(t_all *c, char *envp[]) { ft_bzero(c, sizeof *c); - c->envp = envp; + c->envp = ft_dup_2d_arr(envp); + if (!c->envp) + return (ft_reti_perror(0, "ft_dup_2d_arr(envp) error")); c->prompt_base = init_prompt_base(); if (!c->prompt_base) return (ft_reti_perror(0, "init_prompt_base() error"));