enviroment -> t_list

This commit is contained in:
whaffman 2025-02-07 16:22:30 +01:00
parent 6c726f67f1
commit ef1a3f8a39
9 changed files with 44 additions and 39 deletions

View File

@ -7,7 +7,7 @@ A lot of amazing shell stuff
## TODO ## TODO
- Find absolute path for command input ('/', './', 'cmd') - Find absolute path for command input ('/', './', 'cmd')
- Add heredoc to tokenizer - Add heredoc to tokenizer
- Environment to `t_list` -[x] Environment to `t_list`
- Get environment array (export) - Get environment array (export)
- Preliminary signals - Preliminary signals
- Define struct for commands, something like ( - Define struct for commands, something like (

View File

@ -13,10 +13,10 @@
#ifndef environment_H #ifndef environment_H
# define environment_H # define environment_H
void add_environment(t_environment **environment, char *name, char *value); void add_environment(t_list **environment, char *name, char *value);
void print_environment(t_environment *environment); void print_environment(t_list *environment);
char *get_environment(t_environment *environment, char *name); char *get_environment(t_list *environment, char *name);
void free_environment(t_environment *environment); void free_environment(t_list *environment);
int parse_environment(char **envp, t_environment **environment); int parse_environment(char **envp, t_list **environment);
#endif // environment_H #endif // environment_H

View File

@ -28,7 +28,6 @@ typedef struct s_environment
{ {
char *name; char *name;
char *value; char *value;
struct s_environment *next;
} t_environment; } t_environment;
typedef struct s_token typedef struct s_token
@ -48,7 +47,7 @@ typedef struct s_lexer
typedef struct s_minishell typedef struct s_minishell
{ {
t_environment *environment; t_list *environment;
char *line; char *line;
t_lexer *lexer; t_lexer *lexer;
t_list *tokens; t_list *tokens;

View File

@ -12,21 +12,26 @@
#include "minishell.h" #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_environment *new_environment;
t_list *new_node;
if (name != NULL && value != NULL) if (name != NULL && value != NULL)
{ {
new_environment = malloc(sizeof(t_environment)); new_environment = malloc(sizeof(t_environment));
if (new_environment == NULL) if (new_environment == NULL)
{ return (perror("malloc"));
perror("malloc");
return ;
}
new_environment->name = ft_strdup(name); new_environment->name = ft_strdup(name);
new_environment->value = ft_strdup(value); new_environment->value = ft_strdup(value);
new_environment->next = *environment; new_node = ft_lstnew(new_environment);
*environment = 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);
} }
} }

View File

@ -12,19 +12,17 @@
#include "minishell.h" #include "minishell.h"
void free_environment(t_environment *environment) void free_environment(t_list *environment)
{ {
t_environment *next; t_list *tmp;
while (environment != NULL) while (environment != NULL)
{ {
if (environment->next) tmp = environment;
next = environment->next; environment = environment->next;
else free(((t_environment *)tmp->content)->name);
next = NULL; free(((t_environment *)tmp->content)->value);
free(environment->name); free(tmp->content);
free(environment->value); free(tmp);
free(environment);
environment = next;
} }
} }

View File

@ -12,14 +12,14 @@
#include "minishell.h" #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) while (environment != NULL)
{ {
if (ft_strcmp(environment->name, name) == 0) env = (t_environment *)environment->content;
{ if (ft_strcmp(env->name, name) == 0)
return (environment->value); return (env->value);
}
environment = environment->next; environment = environment->next;
} }
return (NULL); return (NULL);

View File

@ -12,7 +12,7 @@
#include "minishell.h" #include "minishell.h"
int parse_environment(char **envp, t_environment **environment) int parse_environment(char **envp, t_list **environment)
{ {
char **env; char **env;

View File

@ -12,11 +12,14 @@
#include "minishell.h" #include "minishell.h"
void print_environment(t_environment *environment) void print_environment(t_list *environment)
{ {
t_environment *env;
while (environment != NULL) 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; environment = environment->next;
} }
} }

View File

@ -12,16 +12,16 @@
#include "minishell.h" #include "minishell.h"
char *get_user(t_environment *environment) char *get_user(t_list *environment)
{ {
char *str1; char *str1;
char *str2; char *str2;
str1 = ft_strdup(get_environment(environment, "USER")); str1 = ft_strdup(get_environment(environment, "USER"));
if (str1 == NULL) if (str1 == NULL)
{
str1 = ft_strdup("guest"); str1 = ft_strdup("guest");
} if (str1 == NULL)
return (NULL);
str2 = ft_strjoin(GREEN, str1); str2 = ft_strjoin(GREEN, str1);
free(str1); free(str1);
str1 = ft_strjoin(str2, RESET "🐚" GREEN "minishell" RESET ": "); str1 = ft_strjoin(str2, RESET "🐚" GREEN "minishell" RESET ": ");
@ -29,7 +29,7 @@ char *get_user(t_environment *environment)
return (str1); return (str1);
} }
char *get_path(t_environment *environment) char *get_path(t_list *environment)
{ {
char *home; char *home;
char *temp; char *temp;