diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-03-28 12:10:13 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-03-28 12:10:13 +0100 |
| commit | 73a7027a9d58c6ca71817170bff23ac71edac9d8 (patch) | |
| tree | bb992bb24bf4e0f576f4c37eb9cc5dea04cdbdd3 | |
| parent | 3b319748a024067b4ce0b70ae2dad364977d6365 (diff) | |
| download | minishell-73a7027a9d58c6ca71817170bff23ac71edac9d8.tar.gz minishell-73a7027a9d58c6ca71817170bff23ac71edac9d8.tar.bz2 minishell-73a7027a9d58c6ca71817170bff23ac71edac9d8.zip | |
Cleaning env and path, Removed state struct
| -rw-r--r-- | include/minishell.h | 57 | ||||
| -rw-r--r-- | include/ms_parse.h | 18 | ||||
| m--------- | libft | 0 | ||||
| -rw-r--r-- | src/builtin/cd.c | 4 | ||||
| -rw-r--r-- | src/builtin/echo.c | 5 | ||||
| -rw-r--r-- | src/builtin/env.c | 4 | ||||
| -rw-r--r-- | src/builtin/export.c | 8 | ||||
| -rw-r--r-- | src/builtin/pwd.c | 3 | ||||
| -rw-r--r-- | src/builtin/unset.c | 4 | ||||
| -rw-r--r-- | src/env.c (renamed from src/environment.c) | 19 | ||||
| -rw-r--r-- | src/main.c | 14 | ||||
| -rw-r--r-- | src/parse.c | 7 | ||||
| -rw-r--r-- | src/parse/lexer.c | 14 | ||||
| -rw-r--r-- | src/parse/parse.c | 12 | ||||
| -rw-r--r-- | src/path.c | 63 | ||||
| -rw-r--r-- | src/state.c | 32 | ||||
| -rw-r--r-- | src/util.c | 4 |
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); - } @@ -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); } @@ -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); -} @@ -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) |
