aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-03-28 12:10:13 +0100
committerCharles <sircharlesaze@gmail.com>2020-03-28 12:10:13 +0100
commit73a7027a9d58c6ca71817170bff23ac71edac9d8 (patch)
treebb992bb24bf4e0f576f4c37eb9cc5dea04cdbdd3
parent3b319748a024067b4ce0b70ae2dad364977d6365 (diff)
downloadminishell-73a7027a9d58c6ca71817170bff23ac71edac9d8.tar.gz
minishell-73a7027a9d58c6ca71817170bff23ac71edac9d8.tar.bz2
minishell-73a7027a9d58c6ca71817170bff23ac71edac9d8.zip
Cleaning env and path, Removed state struct
-rw-r--r--include/minishell.h57
-rw-r--r--include/ms_parse.h18
m---------libft0
-rw-r--r--src/builtin/cd.c4
-rw-r--r--src/builtin/echo.c5
-rw-r--r--src/builtin/env.c4
-rw-r--r--src/builtin/export.c8
-rw-r--r--src/builtin/pwd.c3
-rw-r--r--src/builtin/unset.c4
-rw-r--r--src/env.c (renamed from src/environment.c)19
-rw-r--r--src/main.c14
-rw-r--r--src/parse.c7
-rw-r--r--src/parse/lexer.c14
-rw-r--r--src/parse/parse.c12
-rw-r--r--src/path.c63
-rw-r--r--src/state.c32
-rw-r--r--src/util.c4
17 files changed, 91 insertions, 177 deletions
diff --git a/include/minishell.h b/include/minishell.h
index 3eb03c7..878add8 100644
--- a/include/minishell.h
+++ b/include/minishell.h
@@ -9,6 +9,7 @@
/* Updated: 2020/02/28 15:30:10 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
+#include <stdio.h> // for debugging - dont remove
#ifndef MINISHELL_H
# define MINISHELL_H
@@ -34,68 +35,44 @@
# define MS_PIPE_WRITE 1
# define MS_PIPE_READ 0
-typedef struct
-{
- t_ftht *commands;
- t_ftlst *dirs;
-} t_path;
-
-typedef struct
-{
- t_path *path;
- t_ftht *environment;
-} t_state;
-
-typedef struct
-{
- int pipe_in[2];
- int pipe_out[2];
-} t_command_frame;
-
-/*
-** state.c
-*/
-
-int ms_state_init(t_state *state, const char **envp);
-void ms_state_destroy(t_state *state);
+typedef t_ftht* t_path;
+typedef t_ftht* t_env;
/*
** eval.c
*/
-int ms_eval(t_ast *parsing);
+int ms_eval(t_path path, t_env env, t_ast *ast);
/*
** path.c
*/
-t_path *ms_path_update(t_path *path, const char *path_str);
-void ms_path_destroy(t_path *path);
+t_path ms_path_update(t_path path, char *path_var);
/*
-** environment.c
+** env.c
*/
-t_ftht *ms_environment_from_array(const char **envp);
-char **ms_environment_to_array(t_ftht *environment);
+t_env ms_env_from_array(char **envp);
+char **ms_env_to_array(t_env env);
/*
-** builtin*.c
+** builtin*.c - directory with all builtin commands
*/
-// typedef int (*t_builtin_func)(t_state *state);
int ms_echo(char **argv);
-int ms_cd(t_state *state, char **argv);
-int ms_pwd(t_state *state);
-int ms_export(t_state *state, char **argv);
-int ms_unset(t_state *state, char **argv);
-int ms_env(t_state *state);
-// int ms_exit(t_state *state);
+int ms_cd(t_env env, char **argv);
+int ms_pwd(void);
+int ms_export(t_env env, char **argv);
+int ms_unset(t_env env, char **argv);
+int ms_env(t_env env);
+int ms_exit(void);
/*
-** util.c
+** util.c - various utilitary functions
*/
-void ms_ht_del_str_entry(t_ftht_content *content);
+void ms_ht_del_str_entry(t_ftht_content *content);
#endif
diff --git a/include/ms_parse.h b/include/ms_parse.h
index ef82146..5351680 100644
--- a/include/ms_parse.h
+++ b/include/ms_parse.h
@@ -65,20 +65,20 @@ typedef enum
** foo bar
*/
-typedef struct t_ast {
- t_tag tag;
- char* contents;
- int children_num;
- struct t_ast** children;
-} t_ast;
+typedef struct s_ast
+{
+ t_tag tag;
+ char* contents;
+ int children_num;
+ struct s_ast** children;
+} t_ast;
-char **ms_lexer(char *input);
+char **ms_lexer(char *input);
/*
** parse.c
*/
-
-void *ms_parse(char *input);
+t_ast *ms_parse(char *input);
#endif
diff --git a/libft b/libft
-Subproject e792d0a3ff1c1da456c241530571263df0b887b
+Subproject 8bba48a8326d9e7a703c3f6f6ab70b8a8a39347
diff --git a/src/builtin/cd.c b/src/builtin/cd.c
index c67cd23..f82a876 100644
--- a/src/builtin/cd.c
+++ b/src/builtin/cd.c
@@ -1,12 +1,12 @@
#include "minishell.h"
-int ms_cd(t_state *state, char **argv)
+int ms_cd(t_env env, char **argv)
{
char *path;
path = argv[1];
if (argv[1] == NULL)
- path = ft_htget(state->environment, "HOME");
+ path = ft_htget(env, "HOME");
if (path == NULL)
return (1);
if (chdir(path) == -1)
diff --git a/src/builtin/echo.c b/src/builtin/echo.c
index b8d2d43..b2bcee9 100644
--- a/src/builtin/echo.c
+++ b/src/builtin/echo.c
@@ -5,10 +5,13 @@ int ms_echo(char **argv)
bool newline;
newline = ft_strcmp(argv[1], "-n") == 0;
+ if (newline)
+ argv++;
while (*++argv != NULL)
{
ft_putstr(*argv);
- ft_putchar(' ');
+ if (*(argv + 1) != NULL)
+ ft_putchar(' ');
}
if (newline)
ft_putchar('\n');
diff --git a/src/builtin/env.c b/src/builtin/env.c
index 24e474f..9e962ec 100644
--- a/src/builtin/env.c
+++ b/src/builtin/env.c
@@ -8,8 +8,8 @@ void st_print_env_variable(t_ftht_content *content)
ft_putchar('\n');
}
-int ms_env(t_state *state)
+int ms_env(t_env env)
{
- ft_htiter(state->environment, st_print_env_variable);
+ ft_htiter(env, st_print_env_variable);
return (0);
}
diff --git a/src/builtin/export.c b/src/builtin/export.c
index e284270..df27655 100644
--- a/src/builtin/export.c
+++ b/src/builtin/export.c
@@ -1,6 +1,6 @@
#include "minishell.h"
-int ms_export(t_state *state, char **argv)
-{
- return (0);
-}
+/* int ms_export(t_env env, char **argv) */
+/* { */
+/* return (0); */
+/* } */
diff --git a/src/builtin/pwd.c b/src/builtin/pwd.c
index 9825bee..2836852 100644
--- a/src/builtin/pwd.c
+++ b/src/builtin/pwd.c
@@ -1,10 +1,9 @@
#include "minishell.h"
-int ms_pwd(t_state *state)
+int ms_pwd(void)
{
char buf[PATH_MAX];
- (void)state;
ft_bzero(buf, PATH_MAX);
if (getcwd(buf, PATH_MAX) == NULL)
return (1);
diff --git a/src/builtin/unset.c b/src/builtin/unset.c
index ea24a63..bc4327b 100644
--- a/src/builtin/unset.c
+++ b/src/builtin/unset.c
@@ -1,9 +1,9 @@
#include "minishell.h"
-int ms_unset(t_state *state, char **argv)
+int ms_unset(t_env env, char **argv)
{
if (argv[1] == NULL)
return (1);
- ft_htdelone(state->environment, argv[1], ms_ht_del_str_entry);
+ ft_htdelone(env, argv[1], ms_ht_del_str_entry);
return (0);
}
diff --git a/src/environment.c b/src/env.c
index 90cac86..04ab561 100644
--- a/src/environment.c
+++ b/src/env.c
@@ -12,19 +12,18 @@
#include "minishell.h"
-#define MS_ENVIRONMENT_HT_SIZE 2048
+#define MS_ENV_HT_SIZE 2048
-t_ftht *ms_environment_from_array(const char **envp)
+t_env ms_env_from_array(char **envp)
{
- t_ftht *environment;
+ t_env env;
int i;
char *key;
char *value;
- /* int equal_pos; */
if (envp == NULL)
return (NULL);
- if ((environment = ft_htnew(MS_ENVIRONMENT_HT_SIZE)) == NULL)
+ if ((env = ft_htnew(MS_ENV_HT_SIZE)) == NULL)
return (NULL);
i = -1;
while (envp[++i] != NULL)
@@ -34,20 +33,18 @@ t_ftht *ms_environment_from_array(const char **envp)
return (NULL);
if ((key = ft_strndup(envp[i], ft_strcspn(envp[i], "="))) == NULL)
return (NULL);
- /* printf("%s -- %d\n", envp[i], strcspn(envp[i], "=")); */
if ((value = ft_strdup(value + 1)) == NULL)
return (NULL);
- if (ft_htset(environment, key, value, ms_ht_del_str_entry) == NULL)
+ if (ft_htset(env, key, value, ms_ht_del_str_entry) == NULL)
return (NULL);
free(key);
}
- return (environment);
+ return (env);
}
-char **ms_environment_to_array(t_ftht *environment)
+char **ms_env_to_array(t_env env)
{
- (void)environment;
+ (void)env;
// need ft_htlen
return (NULL);
-
}
diff --git a/src/main.c b/src/main.c
index 8c2d138..11e4517 100644
--- a/src/main.c
+++ b/src/main.c
@@ -14,15 +14,18 @@
int main(int argc, char **argv, const char **envp)
{
- t_state state;
+ t_path path;
+ t_env env;
/* char *line; */
/* int ret; */
(void)argc;
(void)argv;
- if (ms_state_init(&state, envp) == -1)
- return (1);
- /* ms_env(&state); */
+ env = ms_env_from_array((char**)envp);
+ path = ms_path_update(NULL, ft_htget(env, MS_PATH_KEY));
+
+ printf("%s\n", (char*)ft_htget(path, "nmap"));
+ /* ms_env(env); */
/* ms_pwd(&state); */
/* ms_cd(&state, NULL); */
/* ms_pwd(&state); */
@@ -34,6 +37,7 @@ int main(int argc, char **argv, const char **envp)
/* free(line); */
/* } */
/* free(line); */
- ms_state_destroy(&state);
+ ft_htdestroy(path, ms_ht_del_str_entry);
+ ft_htdestroy(env, ms_ht_del_str_entry);
return (0);
}
diff --git a/src/parse.c b/src/parse.c
deleted file mode 100644
index 5cdb066..0000000
--- a/src/parse.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "minishell.h"
-
-t_parsing *ms_parse(char *input)
-{
- (void)input;
- return NULL;
-}
diff --git a/src/parse/lexer.c b/src/parse/lexer.c
index 7f7a7a2..b5caba2 100644
--- a/src/parse/lexer.c
+++ b/src/parse/lexer.c
@@ -1,9 +1,11 @@
+#include "minishell.h"
-
-char *ms_lexer(char *input)
+char **ms_lexer(char *input)
{
- char **out_lex;
- if (!input)
- return ("");
- return ("");
+ char **out_lex;
+
+ (void)out_lex;
+ if (!input)
+ return (NULL);
+ return (NULL);
}
diff --git a/src/parse/parse.c b/src/parse/parse.c
index d1ec153..bdd0144 100644
--- a/src/parse/parse.c
+++ b/src/parse/parse.c
@@ -1,11 +1,11 @@
#include "minishell.h"
-void *ms_parse(char *input)
+t_ast *ms_parse(char *input)
{
- char **out_lex;
+/* char **out_lex; */
+/* if (!(out_lex = ms_lexer(input))) */
+/* return (NULL); */
- if (!(out_lex = ms_lexer(input)))
- ;
-
- //(void)input;
+ (void)input;
+ return (NULL);
}
diff --git a/src/path.c b/src/path.c
index d4f4418..3ac12d9 100644
--- a/src/path.c
+++ b/src/path.c
@@ -12,15 +12,13 @@
#include "minishell.h"
-static int st_in_dirs(char **dirs, char *dir)
-{
- while (*dirs != NULL)
- if (ft_strcmp(*dirs++, dir) == 0)
- return (0);
- return (-1);
-}
+#define MS_PATH_HT_SIZE 4096
+
+/*
+** Update `path` with all files in the directory named `dirname`.
+*/
-static t_path *st_path_commands_update(t_path *path, char *dirname)
+static t_path st_path_dir_update(t_path path, char *dirname)
{
DIR *dir;
struct dirent *entry;
@@ -30,9 +28,9 @@ static t_path *st_path_commands_update(t_path *path, char *dirname)
return (NULL);
while ((entry = readdir(dir)) != NULL)
{
- if ((tmp = ft_strjoin(dirname, entry->d_name)) == NULL)
+ if ((tmp = ft_strjoin3(dirname, "/", entry->d_name)) == NULL)
return (NULL);
- if (ft_htset(path->commands, entry->d_name, tmp, ms_ht_del_str_entry) == NULL)
+ if (ft_htset(path, entry->d_name, tmp, ms_ht_del_str_entry) == NULL)
return (NULL);
}
if (closedir(dir) == -1)
@@ -41,56 +39,25 @@ static t_path *st_path_commands_update(t_path *path, char *dirname)
}
/*
-** Update path list with `dirname`
-*/
-
-static t_path *st_path_dir_update(t_path *path, char *dirname)
-{
- t_ftlst *front;
-
- if (ft_lstlfind(path->dirs, (int (*)(const void*, const void*))ft_strcmp, dirname) == NULL)
- {
- if ((dirname = ft_strdup(dirname)) == NULL)
- return (NULL);
- if ((front = ft_lstnew(dirname)) == NULL)
- {
- free(dirname);
- return (NULL);
- }
- ft_lstadd_front(&path->dirs, front);
- }
- return (st_path_commands_update(path, dirname));
-}
-
-/*
** Update (or create if `path` is NULL) `path` according to `path_str`
** (each directory is separated by a ':').
*/
-t_path *ms_path_update(t_path *path, const char *path_str)
+t_path ms_path_update(t_path path, char *path_var)
{
int i;
char **dirs;
- if (path == NULL)
- if ((path = malloc(sizeof(t_path))) == NULL)
- return (NULL);
- if ((dirs = ft_split(path_str, ':')) == NULL)
+ if (path_var == NULL)
+ return (NULL);
+ if (path == NULL && (path = ft_htnew(MS_PATH_HT_SIZE)) == NULL)
+ return (NULL);
+ if ((dirs = ft_split(path_var, ':')) == NULL)
return (NULL);
- ft_lstremove_if(&path->dirs, (int (*)(const void*, const void*))st_in_dirs, free, (void*)dirs);
i = -1;
- while (dirs[i] != NULL)
+ while (dirs[++i] != NULL)
if (st_path_dir_update(path, dirs[i]) == NULL)
return (ft_split_destroy(dirs));
ft_split_destroy(dirs);
return (path);
}
-
-void ms_path_destroy(t_path *path)
-{
- if (path == NULL)
- return ;
- ft_lstclear(&path->dirs, free);
- ft_htdestroy(path->commands, ms_ht_del_str_entry);
- free(path);
-}
diff --git a/src/state.c b/src/state.c
deleted file mode 100644
index 41c802b..0000000
--- a/src/state.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* state.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2020/02/28 11:51:54 by cacharle #+# #+# */
-/* Updated: 2020/02/28 12:36:10 by cacharle ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#include "minishell.h"
-
-int ms_state_init(t_state *state, const char **envp)
-{
- state->environment = NULL;
- state->path = NULL;
- if ((state->environment = ms_environment_from_array(envp)) == NULL)
- return (-1);
- /* if ((state->path = ms_path_update(state->path, ft_htget(state->environment, MS_PATH_KEY))) == NULL) */
- /* return (-1); */
- return (0);
-}
-
-void ms_state_destroy(t_state *state)
-{
- if (state == NULL)
- return ;
- /* ms_path_destroy(state->path); */
- ft_htdestroy(state->environment, ms_ht_del_str_entry);
-}
diff --git a/src/util.c b/src/util.c
index f05a507..188b762 100644
--- a/src/util.c
+++ b/src/util.c
@@ -12,6 +12,10 @@
#include "minishell.h"
+/*
+** delete a hash table entry containing a allocated string key and value
+*/
+
void ms_ht_del_str_entry(t_ftht_content *content)
{
if (content == NULL)