/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/21 08:57:54 by ljiriste #+# #+# */
-/* Updated: 2024/08/01 12:07:31 by ljiriste ### ########.fr */
+/* Updated: 2024/08/01 13:03:51 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
return ;
}
-int is_contained_in_dir(const char *exe_name, DIR *dir)
+int contains_path(const char *str)
{
+ return (ft_strchr(str, '/') != NULL);
+}
+
+int file_exists(const char *path)
+{
+ return (!access(path, F_OK));
+}
+
+int is_contained_in_dir(const char *exe_name, const char *dir_name)
+{
+ DIR *dir;
struct dirent *dir_entry;
+ dir = opendir(dir_name);
+ if (!dir)
+ return (0);
dir_entry = readdir(dir);
while (dir_entry)
{
return (1);
dir_entry = readdir(dir);
}
+ closedir(dir);
return (0);
}
const char *path;
char **paths;
size_t i;
- DIR *dir;
char *res;
path = get_env_var_value(env, "PATH");
return (NULL);
res = NULL;
i = 0;
- while (paths[i])
+ while (paths[i] && !res)
{
- dir = opendir(paths[i]);
- if (!dir)
- {
- ++i;
- continue ;
- }
- if (is_contained_in_dir(exe_name, dir))
- {
+ if (is_contained_in_dir(exe_name, paths[i]))
if (ft_strcat_alloc(&res, paths[i]))
if (ft_strcat_alloc(&res, "/"))
ft_strcat_alloc(&res, exe_name);
- break ;
- }
- closedir(dir);
++i;
}
free_split(paths);
- closedir(dir);
return (res);
}
int status;
char *path;
- path = find_exe(fields[0], env);
+ path = NULL;
+ if (contains_path(fields[0]) && file_exists(fields[0]))
+ path = ft_strdup(fields[0]);
+ else if (!contains_path(fields[0]))
+ path = find_exe(fields[0], env);
if (!path)
return (1);
pid = -1;