diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ft_e_builtins.c | 1 | ||||
-rw-r--r-- | src/ft_e_externs.c | 63 |
2 files changed, 62 insertions, 2 deletions
diff --git a/src/ft_e_builtins.c b/src/ft_e_builtins.c index 5d30b2d..4f2c551 100644 --- a/src/ft_e_builtins.c +++ b/src/ft_e_builtins.c @@ -17,6 +17,7 @@ #include <fcntl.h> #include <unistd.h> #include <errno.h> + #include "ft_f_file.h" #include "ft_s_destroy.h" #include "ft_s_lcom.h" diff --git a/src/ft_e_externs.c b/src/ft_e_externs.c index cbfb1f0..9b226d9 100644 --- a/src/ft_e_externs.c +++ b/src/ft_e_externs.c @@ -11,13 +11,72 @@ /* ************************************************************************** */ #include <libft.h> +#include <dirent.h> + +#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) { - (void)ptr; - (void)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 */ } |