/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_e_externs.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 "ft_f_fail.h" #include "ft_s_destroy.h" #include "ft_s_lcom.h" #include "ft_s_struct.h" static void ft_search_in_path(const char *com, char **envpath) { char **p_path; (void)com; p_path = envpath; while (*p_path) { /* TODO: directory(3) */ /* opendir() | readdir() | closedir() */ p_path++; } } static char **ft_get_env_path(t_msh *msh) { char **p_env; char **envpath; char *envline; p_env = msh->envp; while (*p_env && ft_strncmp("PATH", *p_env, 4) != 0) { p_env++; } if (*p_env == NULL) return (NULL); envline = ft_strchr(*p_env, '='); envline += 1; if (*envline != '\0') { if (!(envpath = ft_split(envline, ':'))) { ft_lcom_clear(&msh->curr); ft_s_destroy(msh); ft_fail_alloc(); } return (envpath); } return (NULL); } void ft_e_extern(t_lcom *ptr, t_msh *msh) { char **envpath; if (ft_ischarset("/.", ptr->com[0])) { /* TODO: ft_get_absolute_path(ptr->com); */ } else if ((envpath = ft_get_env_path(msh)) != NULL) { ft_search_in_path(ptr->com, envpath); ft_delwords(envpath); } /* TODO: exec $PATH stuff | initiate all builtins first, even uncomplete */ }