diff --git a/README.md b/README.md index 524c842..9467a3f 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ A lot of amazing shell stuff ## TODO - Find absolute path for command input ('/', './', 'cmd') - Add heredoc to tokenizer -- Environment to `t_list` +-[x] Environment to `t_list` - Get environment array (export) - Preliminary signals - Define struct for commands, something like ( diff --git a/inc/environment.h b/inc/environment.h index 66475a7..64cd4b0 100644 --- a/inc/environment.h +++ b/inc/environment.h @@ -13,10 +13,10 @@ #ifndef environment_H # define environment_H -void add_environment(t_environment **environment, char *name, char *value); -void print_environment(t_environment *environment); -char *get_environment(t_environment *environment, char *name); -void free_environment(t_environment *environment); -int parse_environment(char **envp, t_environment **environment); +void add_environment(t_list **environment, char *name, char *value); +void print_environment(t_list *environment); +char *get_environment(t_list *environment, char *name); +void free_environment(t_list *environment); +int parse_environment(char **envp, t_list **environment); #endif // environment_H diff --git a/inc/typedef.h b/inc/typedef.h index d2e70d3..5a9f9cd 100644 --- a/inc/typedef.h +++ b/inc/typedef.h @@ -28,7 +28,6 @@ typedef struct s_environment { char *name; char *value; - struct s_environment *next; } t_environment; typedef struct s_token @@ -48,7 +47,7 @@ typedef struct s_lexer typedef struct s_minishell { - t_environment *environment; + t_list *environment; char *line; t_lexer *lexer; t_list *tokens; diff --git a/src/environment/add_environment.c b/src/environment/add_environment.c index 8e6d184..7cae6be 100644 --- a/src/environment/add_environment.c +++ b/src/environment/add_environment.c @@ -12,21 +12,26 @@ #include "minishell.h" -void add_environment(t_environment **environment, char *name, char *value) +void add_environment(t_list **environment, char *name, char *value) { t_environment *new_environment; + t_list *new_node; if (name != NULL && value != NULL) { new_environment = malloc(sizeof(t_environment)); if (new_environment == NULL) - { - perror("malloc"); - return ; - } + return (perror("malloc")); new_environment->name = ft_strdup(name); new_environment->value = ft_strdup(value); - new_environment->next = *environment; - *environment = new_environment; + new_node = ft_lstnew(new_environment); + if (new_node == NULL || new_environment->name == NULL || new_environment->value == NULL) + { + free(new_environment->name); + free(new_environment->value); + free(new_environment); + return (perror("malloc")); + } + ft_lstadd_back(environment, new_node); } -} +} \ No newline at end of file diff --git a/src/environment/free_environment.c b/src/environment/free_environment.c index ccbde2b..182f217 100644 --- a/src/environment/free_environment.c +++ b/src/environment/free_environment.c @@ -12,19 +12,17 @@ #include "minishell.h" -void free_environment(t_environment *environment) +void free_environment(t_list *environment) { - t_environment *next; + t_list *tmp; while (environment != NULL) { - if (environment->next) - next = environment->next; - else - next = NULL; - free(environment->name); - free(environment->value); - free(environment); - environment = next; + tmp = environment; + environment = environment->next; + free(((t_environment *)tmp->content)->name); + free(((t_environment *)tmp->content)->value); + free(tmp->content); + free(tmp); } } diff --git a/src/environment/get_environment.c b/src/environment/get_environment.c index 2f7053e..607d045 100644 --- a/src/environment/get_environment.c +++ b/src/environment/get_environment.c @@ -12,14 +12,14 @@ #include "minishell.h" -char *get_environment(t_environment *environment, char *name) +char *get_environment(t_list *environment, char *name) { + t_environment *env; while (environment != NULL) { - if (ft_strcmp(environment->name, name) == 0) - { - return (environment->value); - } + env = (t_environment *)environment->content; + if (ft_strcmp(env->name, name) == 0) + return (env->value); environment = environment->next; } return (NULL); diff --git a/src/environment/parse_environment.c b/src/environment/parse_environment.c index 49f526f..ad97d79 100644 --- a/src/environment/parse_environment.c +++ b/src/environment/parse_environment.c @@ -12,7 +12,7 @@ #include "minishell.h" -int parse_environment(char **envp, t_environment **environment) +int parse_environment(char **envp, t_list **environment) { char **env; diff --git a/src/environment/print_environment.c b/src/environment/print_environment.c index 2195ab5..e5edb88 100644 --- a/src/environment/print_environment.c +++ b/src/environment/print_environment.c @@ -12,11 +12,14 @@ #include "minishell.h" -void print_environment(t_environment *environment) +void print_environment(t_list *environment) { + t_environment *env; + while (environment != NULL) { - printf("%s=%s\n", environment->name, environment->value); + env = (t_environment *)environment->content; + printf("%s=%s\n", env->name, env->value); environment = environment->next; } -} +} \ No newline at end of file diff --git a/src/prompt/prompt.c b/src/prompt/prompt.c index 089bc0e..6c5c68b 100644 --- a/src/prompt/prompt.c +++ b/src/prompt/prompt.c @@ -12,16 +12,16 @@ #include "minishell.h" -char *get_user(t_environment *environment) +char *get_user(t_list *environment) { char *str1; char *str2; str1 = ft_strdup(get_environment(environment, "USER")); if (str1 == NULL) - { str1 = ft_strdup("guest"); - } + if (str1 == NULL) + return (NULL); str2 = ft_strjoin(GREEN, str1); free(str1); str1 = ft_strjoin(str2, RESET "🐚" GREEN "minishell" RESET ": "); @@ -29,7 +29,7 @@ char *get_user(t_environment *environment) return (str1); } -char *get_path(t_environment *environment) +char *get_path(t_list *environment) { char *home; char *temp;