diff options
author | JozanLeClerc <bousset.rudy@gmail.com> | 2020-04-23 17:55:08 +0200 |
---|---|---|
committer | JozanLeClerc <bousset.rudy@gmail.com> | 2020-04-23 17:55:08 +0200 |
commit | 546e74476d23f18d8cc89d0ddd41a5b3e1a9b362 (patch) | |
tree | b179cc992e9be7fb9838cabb8e36234665ea1bf9 /src/ft_e_externs.c | |
parent | BSD style (diff) | |
download | 42-minishell-546e74476d23f18d8cc89d0ddd41a5b3e1a9b362.tar.gz 42-minishell-546e74476d23f18d8cc89d0ddd41a5b3e1a9b362.tar.bz2 42-minishell-546e74476d23f18d8cc89d0ddd41a5b3e1a9b362.tar.xz 42-minishell-546e74476d23f18d8cc89d0ddd41a5b3e1a9b362.tar.zst 42-minishell-546e74476d23f18d8cc89d0ddd41a5b3e1a9b362.zip |
ok
Diffstat (limited to '')
-rw-r--r-- | src/ft_e_externs.c | 63 |
1 files changed, 61 insertions, 2 deletions
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 */ } |