diff --git a/inc/typedef.h b/inc/typedef.h index 7fb44a4..292ed84 100644 --- a/inc/typedef.h +++ b/inc/typedef.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ */ /* +#+ */ /* Created: 2025/02/05 12:36:08 by whaffman #+# #+# */ -/* Updated: 2025/02/26 16:19:13 by whaffman ######## odam.nl */ +/* Updated: 2025/02/26 17:26:27 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -77,6 +77,7 @@ typedef struct s_minishell t_list *tokens; t_list *commands; t_list *freelist; + int exit_status; } t_minishell; typedef int (*t_builtin_fn)(t_minishell *, t_command *); diff --git a/src/executor/executor_execute_pipeline.c b/src/executor/executor_execute_pipeline.c index 623a29a..166eece 100644 --- a/src/executor/executor_execute_pipeline.c +++ b/src/executor/executor_execute_pipeline.c @@ -6,7 +6,7 @@ /* By: willem +#+ */ /* +#+ */ /* Created: 2025/02/12 21:25:02 by willem #+# #+# */ -/* Updated: 2025/02/26 16:10:39 by whaffman ######## odam.nl */ +/* Updated: 2025/02/26 17:42:46 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -31,6 +31,7 @@ int executor_execute_pipeline(t_minishell *msh) current = current->next; } waitpid(last_pid, &exit_status, 0); + msh->exit_status = ((exit_status) & 0xff00) >> 8; signal_init_minishell(); return (((exit_status) & 0xff00) >> 8); } diff --git a/src/executor/executor_fork.c b/src/executor/executor_fork.c index 2af4345..4b359e6 100644 --- a/src/executor/executor_fork.c +++ b/src/executor/executor_fork.c @@ -6,7 +6,7 @@ /* By: willem +#+ */ /* +#+ */ /* Created: 2025/02/12 21:24:52 by willem #+# #+# */ -/* Updated: 2025/02/26 16:10:40 by whaffman ######## odam.nl */ +/* Updated: 2025/02/26 17:44:36 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -33,6 +33,6 @@ pid_t executor_fork(t_minishell *msh, t_command *command) exit(127); } else - perror("fork"); + error_msg("minishell", "fork failed"); return (pid); } diff --git a/src/expander/expander_parse_string.c b/src/expander/expander_parse_string.c index 42253bf..1b2d213 100644 --- a/src/expander/expander_parse_string.c +++ b/src/expander/expander_parse_string.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* ::: :::::::: */ -/* expander_parse_string.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: qmennen +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/02/18 19:00:35 by qmennen #+# #+# */ -/* Updated: 2025/02/26 18:33:41 by qmennen ### ########.fr */ +/* :::::::: */ +/* expander_parse_string.c :+: :+: */ +/* +:+ */ +/* By: qmennen +#+ */ +/* +#+ */ +/* Created: 2025/02/18 19:00:35 by qmennen #+# #+# */ +/* Updated: 2025/02/26 22:56:05 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ diff --git a/src/expander/expander_parse_variables.c b/src/expander/expander_parse_variables.c index 302966a..7bb70b6 100644 --- a/src/expander/expander_parse_variables.c +++ b/src/expander/expander_parse_variables.c @@ -6,12 +6,31 @@ /* By: qmennen +#+ */ /* +#+ */ /* Created: 2025/02/19 13:58:13 by qmennen #+# #+# */ -/* Updated: 2025/02/26 16:13:42 by whaffman ######## odam.nl */ +/* Updated: 2025/02/26 17:41:14 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #include "minishell.h" +static char *ft_itoa_safe(t_minishell *msh, int n) +{ + char *str; + + str = ft_itoa(n); + check_malloc(msh, str); + return (str); +} + +static t_list *create_exit_status_env(t_minishell *msh) +{ + t_environment *env; + + env = malloc_safe(msh, sizeof(t_environment)); + env->name = ft_strdup_safe(msh, "?"); + env->value = ft_itoa_safe(msh, msh->exit_status); + return (ft_lstnew_safe(msh, env)); +} + t_list *expander_parse_variables(const char *s, t_minishell *msh) { int i; @@ -28,7 +47,12 @@ t_list *expander_parse_variables(const char *s, t_minishell *msh) if (env) ft_lstadd_back(&var_list, ft_lstnew_safe(msh, env)); else - ft_lstadd_back(&var_list, ft_lstnew_safe(msh, NULL)); + { + if (s[i + 1] == '?') + ft_lstadd_back(&var_list, create_exit_status_env(msh)); + else + ft_lstadd_back(&var_list, ft_lstnew_safe(msh, NULL)); + } } i++; } diff --git a/src/utils/init_minishell.c b/src/utils/init_minishell.c index d248dc8..016be86 100644 --- a/src/utils/init_minishell.c +++ b/src/utils/init_minishell.c @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/02/05 16:03:03 by whaffman #+# #+# */ -/* Updated: 2025/02/26 16:16:37 by whaffman ######## odam.nl */ +/* Updated: 2025/02/26 17:39:41 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -28,5 +28,6 @@ t_minishell *init_minishell(void) msh->tokens = NULL; msh->commands = NULL; msh->freelist = NULL; + msh->exit_status = 0; return (msh); }