/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_get_executable.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: cchauvet 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); } static char **ft_get_paths(t_data *data, const char *name) { char *paths; char **tab; 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); } return (tab); } static char *ft_get_executable_without_path(t_data *data, const char *name) { char **paths; char *path; size_t i; paths = ft_get_paths(data, name); if (paths == NULL) return (NULL); path = NULL; i = 0; while (paths[i] != NULL) { path = ft_strmerger(3, paths[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, paths); 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); }