maxishell
Implementation of a shell for Linux-like systems
Loading...
Searching...
No Matches
env.c File Reference
#include "env.h"
#include "libft.h"
#include <stdlib.h>
#include <stdio.h>
Include dependency graph for env.c:

Go to the source code of this file.

Functions

void init_env (t_env **data_envp, char **envp)
 
void add_env_node (t_env **data_envp, char *line)
 
char * get_env (t_env *envp, const char *key)
 
void set_env (t_env **env, const char *key, const char *value)
 
int unset_env (t_env **env, const char *name)
 
char * ft_remove_all_edge_quotes (char *str, char quote_type)
 

Function Documentation

◆ add_env_node()

void add_env_node ( t_env **  data_envp,
char *  line 
)

Definition at line 55 of file env.c.

56{
57 t_env *new_node;
58 char *eq_pos;
59 t_env *curr;
60
61 new_node = malloc(sizeof(t_env));
62 if (!new_node)
63 return ;
64 eq_pos = ft_strchr(line, '=');
65 if (!eq_pos)
66 return ;
67 new_node->key = ft_strndup(line, eq_pos - line);
68 new_node->value = ft_strdup(eq_pos + 1);
69 new_node->next = NULL;
70 if (!*data_envp)
71 *data_envp = new_node;
72 else
73 {
74 curr = *data_envp;
75 while (curr->next)
76 curr = curr->next;
77 curr->next = new_node;
78 }
79}
char * ft_strndup(const char *s, size_t n)
Definition ft_strndup.c:23
char * ft_strchr(const char *s, int c)
Definition ft_strchr.c:25
char * ft_strdup(const char *s)
Definition ft_strdup.c:23
Definition env.h:17
struct s_env * next
Definition env.h:20
char * key
Definition env.h:18
char * value
Definition env.h:19

References ft_strchr(), ft_strdup(), ft_strndup(), s_env::key, s_env::next, and s_env::value.

Referenced by init_env().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ft_remove_all_edge_quotes()

char * ft_remove_all_edge_quotes ( char *  str,
char  quote_type 
)

Definition at line 24 of file env.c.

25{
26 int start_quotes;
27 int end_quotes;
28 int len;
29 char *new_str;
30
31 len = ft_strlen(str);
32 start_quotes = 0;
33 while (str[start_quotes] == quote_type)
34 start_quotes++;
35 end_quotes = 0;
36 while (len - end_quotes - 1 >= 0 && str[len - end_quotes - 1] == quote_type)
37 end_quotes++;
38 if (start_quotes > 0 && start_quotes == end_quotes)
39 {
40 new_str = ft_strndup(str + start_quotes, len - 2 * start_quotes);
41 return (new_str);
42 }
43 return (ft_strdup(str));
44}
size_t ft_strlen(const char *s)
Definition ft_strlen.c:15

References ft_strdup(), ft_strlen(), and ft_strndup().

Referenced by remove_quotes().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_env()

char * get_env ( t_env envp,
const char *  key 
)

Definition at line 81 of file env.c.

82{
83 t_env *curr_node;
84
85 curr_node = envp;
86 while (curr_node)
87 {
88 if (ft_strcmp(curr_node->key, key) == 0)
89 return (curr_node->value);
90 curr_node = curr_node->next;
91 }
92 return (NULL);
93}
int ft_strcmp(const char *s1, const char *s2)
Definition ft_strcmp.c:24

References ft_strcmp(), s_env::key, s_env::next, and s_env::value.

Referenced by builtin_cd(), ft_find_path(), generate_prompt_string(), get_env_variable(), handle_get_shell_variable(), test_get_env(), test_set_env(), and test_unset_env().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ init_env()

void init_env ( t_env **  data_envp,
char **  envp 
)

Definition at line 46 of file env.c.

47{
48 int i;
49
50 i = -1;
51 while (envp[++i])
52 add_env_node(data_envp, envp[i]);
53}
void add_env_node(t_env **data_envp, char *line)
Definition env.c:55

References add_env_node().

Referenced by init_ms_data(), test_get_env(), test_init_env(), and test_set_env().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_env()

void set_env ( t_env **  env,
const char *  key,
const char *  value 
)

Definition at line 44 of file utils_utils.c.

45{
46 t_env *current;
47 char *modified_value;
48
49 current = *env;
50 modified_value = NULL;
51 if (value[0] != '\0')
52 modified_value = remove_quotes(value);
53 else
54 modified_value = ft_strdup(value);
55 while (current)
56 {
57 if (ft_strcmp(current->key, key) == 0)
58 {
59 free(current->value);
60 current->value = modified_value;
61 return ;
62 }
63 current = current->next;
64 }
65 add_new_env(env, key, modified_value);
66}
static char * remove_quotes(const char *value)
Definition utils_utils.c:20
void add_new_env(t_env **env, const char *key, char *modified_value)
Definition utils_utils.c:31

◆ unset_env()

int unset_env ( t_env **  env,
const char *  name 
)

Definition at line 95 of file env.c.

96{
97 t_env *current;
98 t_env *prev;
99
100 current = *env;
101 prev = NULL;
102 while (current)
103 {
104 if (ft_strcmp(current->key, key) == 0)
105 {
106 if (prev)
107 prev->next = current->next;
108 else
109 *env = current->next;
110 free(current->key);
111 free(current->value);
112 free(current);
113 return (0);
114 }
115 prev = current;
116 current = current->next;
117 }
118 return (-1);
119}

References ft_strcmp(), s_env::key, s_env::next, and s_env::value.

Referenced by builtin_unset(), and test_unset_env().

Here is the call graph for this function:
Here is the caller graph for this function: