From 42149a2a0d26f52217614ef6c3a046cf997e38c8 Mon Sep 17 00:00:00 2001 From: mdev9 Date: Fri, 16 Feb 2024 16:12:49 +0100 Subject: [PATCH] added forks --- exec.c | 23 ++++++++++++++++++++--- minishell.h | 3 ++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/exec.c b/exec.c index 23fed98..2ba94c0 100755 --- a/exec.c +++ b/exec.c @@ -6,14 +6,17 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/07 14:12:49 by tomoron #+# #+# */ -/* Updated: 2024/02/16 15:10:43 by marde-vr ### ########.fr */ +/* Updated: 2024/02/16 16:11:50 by marde-vr ### ########.fr */ /* */ /* ************************************************************************** */ +#include "libft/libft.h" #include "minishell.h" +#include int exec_builtin(t_cmd *parsed_cmd, t_env *env) { + if (!ft_strcmp(parsed_cmd->token, "echo")) g_return_code = echo(parsed_cmd->next); else if (!ft_strcmp(parsed_cmd->token, "ret")) @@ -112,7 +115,7 @@ void get_cmd_path(t_cmd *cmd, t_env *env) int found; found = 0; - if (access(cmd->token, X_OK) != -1) + if (ft_strchr(cmd->token, '/') && access(cmd->token, X_OK) != -1) found = 1; else { @@ -151,5 +154,19 @@ void exec_command(t_cmd *parsed_cmd, t_env *env) i++; } get_cmd_path(parsed_cmd, env); - execve(parsed_cmd->token, cmd_args, env_to_char_tab(env)); + + pid_t pid; + pid = fork(); + if (pid == -1) + { + perror("fork"); + ft_exit(parsed_cmd, env, 1); + } + if (pid == 0) + execve(parsed_cmd->token, cmd_args, env_to_char_tab(env)); + else + rl_redisplay(); + if (waitpid(pid, 0, 0) < 0) + ft_exit(parsed_cmd, env, 1); + } diff --git a/minishell.h b/minishell.h index d131511..65a24af 100755 --- a/minishell.h +++ b/minishell.h @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/04 17:31:38 by tomoron #+# #+# */ -/* Updated: 2024/02/16 14:36:19 by marde-vr ### ########.fr */ +/* Updated: 2024/02/16 16:11:48 by marde-vr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,6 +16,7 @@ # include # include # include //debug +# include # include "libft/libft.h" typedef enum e_token_type