#include "./utils.h" #include char *ft_get_executable_with_path(t_data *data, const char *name) { char *path; if (access(name, F_OK) != 0) { data->exit_code = 127; ft_eprintf("minishell: %s bash: No such file or directery\n"); return (NULL); } if (access(name, X_OK) != 0) { data->exit_code = 126; ft_eprintf("minishell: %s: permission denied\n", name); return (NULL); } path = ft_strdup(name); if (path == NULL) { ft_eprintf("minishell: malloc failed\n"); return (NULL); } return (path); } char *ft_get_executable_without_path(t_data *data, const char *name) { char **tab; char *paths; char *path; size_t i; path = NULL; paths = get_value_by_key("PATH", data->env); if (paths == NULL) { data->exit_code = 127; ft_eprintf("minishell: %s: command not found\n", name); return (NULL); } tab = ft_split(paths, ':'); if (tab == NULL) { ft_eprintf("minishell: malloc failed\n"); return (NULL); } i = 0; while (tab[i] != NULL) { path = ft_strmerger(3, tab[i], "/", name); if (path == NULL) { ft_eprintf("minishell: malloc failed\n"); break ; } if (access(path, X_OK) == 0) break ; free(path); path = NULL; i++; } ft_freer_tab_ultimate(1, tab); if (path == NULL) { data->exit_code = 127; ft_eprintf("minishell: %s: command not found\n", name); } return (path); } char *ft_get_executable(t_data *data, const char *name) { char *path; if (name[0] == '.' || name[0] == '/') path = ft_get_executable_with_path(data, name); else path = ft_get_executable_without_path(data, name); return (path); }