From 2dc8817d9893e4c3ec623f6407c8ac3d79987b58 Mon Sep 17 00:00:00 2001 From: y-syo Date: Tue, 18 Jun 2024 20:31:40 +0200 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=F0=9F=94=A8=E3=80=8D=20fix(exec=5Fcmd?= =?UTF-8?q?):=20fixed=20some=20things.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/exec/exec_split_cmd.c | 81 +++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/src/exec/exec_split_cmd.c b/src/exec/exec_split_cmd.c index 30287cb..26b674b 100644 --- a/src/exec/exec_split_cmd.c +++ b/src/exec/exec_split_cmd.c @@ -6,7 +6,7 @@ /* By: mmoussou infile, STDIN_FILENO); - if (status == -1) - return (-1); - if (cmd->outfile != STDOUT_FILENO) - status = dup2(STDOUT_FILENO, cmd->outfile); - else - status = dup2(STDOUT_FILENO, STDIN_FILENO); - if (status == -1) - return (-1); - status = switch_cmd_path(cmd, env_t); - if (status == -1) - return (-1); fork_pid = fork(); if (fork_pid == -1) return (-1); if (!fork_pid) - status = execve(cmd->cmd, cmd->argv, env); - if (!fork_pid) + { + status = dup2(cmd->infile, STDIN_FILENO); + if (status == -1) + return (-1); + if (cmd->outfile != STDOUT_FILENO) + status = dup2(STDOUT_FILENO, cmd->outfile); + else + status = dup2(STDOUT_FILENO, STDIN_FILENO); + if (status == -1) + return (-1); + status = switch_cmd_path(cmd, env_t); + if (status == -1) + return (-1); + execve(cmd->cmd, cmd->argv, env); exit(-1); - else - waitpid(fork_pid, NULL, 0); + } return (0); } @@ -65,25 +70,23 @@ int exec_last_cmd(t_cmd *cmd, char **env, t_env *env_t) int fork_pid; int status; - status = dup2(cmd->infile, STDIN_FILENO); - if (status == -1) - return (-1); - status = dup2(STDOUT_FILENO, cmd->outfile); - if (status == -1) - return (-1); - status = switch_cmd_path(cmd, env_t); - if (status == -1) - return (-1); fork_pid = fork(); if (fork_pid == -1) return (-1); if (!fork_pid) { + status = dup2(cmd->infile, STDIN_FILENO); + if (status == -1) + return (-1); + status = dup2(STDOUT_FILENO, cmd->outfile); + if (status == -1) + return (-1); + status = switch_cmd_path(cmd, env_t); + if (status == -1) + return (-1); status = execve(cmd->cmd, cmd->argv, env); exit(-1); } - else - waitpid(fork_pid, NULL, 0); return (0); } @@ -91,6 +94,7 @@ int exec_split_cmd(t_list *list_cmd, t_env *env) { char **env_array; int status; + int return_code; env_array = env_get(env); if (!env_array) @@ -109,5 +113,18 @@ int exec_split_cmd(t_list *list_cmd, t_env *env) ft_free("a", &env_array); if (status == -1) return (-1); + waitpid(-1, &return_code, 0); + if (WIFEXITED(return_code)) + printf("minishell: %d\n", WEXITSTATUS(return_code)); + else + { + if (WIFSIGNALED(return_code)) + { + if (WCOREDUMP(return_code)) + printf("minishell: %d\n", WTERMSIG(return_code)); + else + printf("minishell: %d\n", WTERMSIG(return_code)); + } + } return (0); }