From ca2e36781039eb7e9901ccde395600e7af87ff4f Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Tue, 15 Sep 2020 19:59:41 +0200 Subject: Huge fixes and stack stuff --- src/u_path.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/u_path.c (limited to 'src/u_path.c') diff --git a/src/u_path.c b/src/u_path.c new file mode 100644 index 0000000..b43946f --- /dev/null +++ b/src/u_path.c @@ -0,0 +1,72 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* u_path.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: rbousset +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */ +/* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include +#include + +#include "s_struct.h" +#include "u_vars.h" + +static void u_get_fullpath(char fullpath[], + const char p_path[], + const char d_name[], + size_t dstsize) +{ + const size_t path_len = ft_strlen(p_path); + const size_t name_len = ft_strlen(d_name); + + fullpath[0] = C_NUL; + if (path_len + name_len < dstsize) + { + (void)ft_memcpy(fullpath, p_path, path_len); + *(fullpath + (path_len)) = '/'; + ft_memcpy(fullpath + path_len + 1, d_name, name_len); + *(fullpath + (path_len + name_len + 1)) = '\0'; + } +} + +uint8_t u_search_in_path(char fullpath[], + const char com[], + size_t dstsize, + t_msh *msh) +{ + struct dirent *ent; + char tmp[ARG_MAX]; + char *tok_path; + DIR *dir; + + if (u_get_var_value(tmp, "$PATH", ARG_MAX, msh) != 0) + return (1); + tok_path = ft_strtok(tmp, ":"); + while (tok_path != NULL) + { + if ((dir = opendir(tok_path)) != NULL) + { + while ((ent = readdir(dir)) != NULL) + { + if (ft_strncmp(com, ent->d_name, ft_strlen(com) + 1) == 0) + { + u_get_fullpath(fullpath, tok_path, ent->d_name, dstsize); + closedir(dir); + if (fullpath[0] == C_NUL) + return (1); + return (0); + } + } + closedir(dir); + } + tok_path = ft_strtok(NULL, ":"); + } + return (1); +} -- cgit v1.2.3