#include "./utils.h" #include char *ft_get_executable_with_path(const char *name) { char *path; if (access(name, F_OK) != 0) { ft_eprintf("minishell: %s bash: No such file or directery\n"); return (NULL); } if (access(name, X_OK) != 0) { 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_list **env, const char *name) { char **tab; char *paths; char *path; size_t i; path = NULL; paths = get_value_by_key("PATH", env); if (paths == NULL) path = ""; 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) ft_eprintf("minishell: %s: command not found\n", name); return (path); } char *ft_get_executable(t_list **env, const char *name) { char *path; if (name[0] == '.' || name[0] == '/') path = ft_get_executable_with_path(name); else path = ft_get_executable_without_path(env, name); return (path); }