From 1b41f49341d0ef57ea93793d7836d644e8f45b7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kha=C3=AFs=20COLIN?= Date: Wed, 2 Apr 2025 15:26:11 +0200 Subject: [PATCH] exec: retain exit status of commands, including if they were signaled --- src/executing/simple_cmd/simple_cmd_execute.c | 18 +++++++++++++++--- test.sh | 15 +++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/executing/simple_cmd/simple_cmd_execute.c b/src/executing/simple_cmd/simple_cmd_execute.c index 65612bf..ad6d5f0 100644 --- a/src/executing/simple_cmd/simple_cmd_execute.c +++ b/src/executing/simple_cmd/simple_cmd_execute.c @@ -6,7 +6,7 @@ /* By: khais +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/03/27 16:21:56 by khais #+# #+# */ -/* Updated: 2025/04/02 18:19:57 by khais ### ########.fr */ +/* Updated: 2025/04/02 18:45:47 by khais ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,13 +18,25 @@ #include #include #include - +#include + static void command_not_found(t_simple_cmd *cmd) { ft_dprintf(STDERR_FILENO, "minishell: %s: command not found\n", cmd->words->word->word); } +static void do_waitpid(t_minishell *app, int pid) +{ + int wstatus; + + waitpid(pid, &wstatus, 0); + if (WIFEXITED(wstatus)) + app->last_return_value = WEXITSTATUS(wstatus); + if (WIFSIGNALED(wstatus)) + app->last_return_value = 128 + WTERMSIG(wstatus); +} + void simple_cmd_execute(t_simple_cmd *cmd, t_minishell *app) { char *exe; @@ -44,6 +56,6 @@ void simple_cmd_execute(t_simple_cmd *cmd, t_minishell *app) if (pid == 0) execute_subprocess(exe, cmd, app); free(exe); - waitpid(pid, NULL, 0); + do_waitpid(app, pid); return ; } diff --git a/test.sh b/test.sh index 2b647bc..18e4bf6 100755 --- a/test.sh +++ b/test.sh @@ -342,6 +342,21 @@ expecting <