diff options
Diffstat (limited to 'src/eval/cmd.c')
| -rw-r--r-- | src/eval/cmd.c | 39 |
1 files changed, 14 insertions, 25 deletions
diff --git a/src/eval/cmd.c b/src/eval/cmd.c index 04d66aa..cc22441 100644 --- a/src/eval/cmd.c +++ b/src/eval/cmd.c @@ -6,7 +6,7 @@ /* By: charles <charles@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/14 10:41:31 by charles #+# #+# */ -/* Updated: 2020/09/15 13:07:36 by charles ### ########.fr */ +/* Updated: 2020/09/15 17:51:05 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,25 +15,20 @@ pid_t g_child_pid = -1; int g_last_status = 0; -int wrapped_cmd(void *void_param) +int wrapped_cmd(t_fork_param_cmd *param) { - t_fork_param_cmd *param; - int status; + int status; - param = void_param; if (param->builtin != NULL) return (param->builtin->func(param->argv, param->env)); - else + status = execve(param->exec_path, param->argv, (char**)param->env->data); + if (status == -1) { - status = execve(param->exec_path, param->argv, (char**)param->env->data); - if (status == -1) - { - if (errno == ENOEXEC) - return (0); - return (errorf_ret(126, "%s: %s\n", param->exec_path, strerror(errno))); - } - return (status); + if (errno == ENOEXEC) + return (0); + return (errorf_ret(126, "%s: %s\n", param->exec_path, strerror(errno))); } + return (status); } int eval_cmd(int fds[2], t_env env, t_ast *ast, pid_t *child_pid) @@ -52,22 +47,16 @@ int eval_cmd(int fds[2], t_env env, t_ast *ast, pid_t *child_pid) if (param.builtin != NULL && !param.builtin->forked && child_pid == NULL) return (param.builtin->func(argv, env)); - if (param.builtin == NULL) + if (param.builtin == NULL + && (status = path_search(env, argv[0], param.exec_path, true)) != 0) { - - if ((status = path_search(env, argv[0], param.exec_path, true)) != 0) - { - /* errorf("%s: command not found\n", argv[0]); */ - ft_split_destroy(argv); - return (status); - } - /* if ((status = exec_path_check(param.exec_path)) != 0) */ - /* return (status); */ + ft_split_destroy(argv); + return (status); } param.argv = argv; param.env = env; - status = fork_wrap(fds, ¶m, &wrapped_cmd, child_pid); + status = fork_wrap(fds, ¶m, (t_wrapped_func)wrapped_cmd, child_pid); ft_split_destroy(argv); g_last_status = status; return (status); |
