summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-04-23 17:55:08 +0200
committerJozanLeClerc <bousset.rudy@gmail.com>2020-04-23 17:55:08 +0200
commit546e74476d23f18d8cc89d0ddd41a5b3e1a9b362 (patch)
treeb179cc992e9be7fb9838cabb8e36234665ea1bf9
parentBSD style (diff)
download42-minishell-546e74476d23f18d8cc89d0ddd41a5b3e1a9b362.tar.gz
42-minishell-546e74476d23f18d8cc89d0ddd41a5b3e1a9b362.tar.bz2
42-minishell-546e74476d23f18d8cc89d0ddd41a5b3e1a9b362.tar.xz
42-minishell-546e74476d23f18d8cc89d0ddd41a5b3e1a9b362.tar.zst
42-minishell-546e74476d23f18d8cc89d0ddd41a5b3e1a9b362.zip
ok
-rw-r--r--src/ft_e_builtins.c1
-rw-r--r--src/ft_e_externs.c63
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 */
}