maxishell
Implementation of a shell for Linux-like systems
Loading...
Searching...
No Matches
loc_env_var_handler.c File Reference
#include <tokens.h>
Include dependency graph for loc_env_var_handler.c:

Go to the source code of this file.

Functions

void handle_local_vars (t_ms_data *data, char *arg)
 
char * process_argument (char *arg, t_ms_data *data)
 
void handle_split_allocation (t_ast *command_node, int *current_size, int required_size)
 
void split_loc_vars (t_ast *command_node, char *processed_arg, int *current_size, int *i)
 
void post_process_command_args (t_ast *command_node, int arg_count, t_ms_data *data)
 
char * append_expanded_var (char *processed_arg, char *tmp_ad, char *expanded_var)
 

Function Documentation

◆ append_expanded_var()

char * append_expanded_var ( char *  processed_arg,
char *  tmp_ad,
char *  expanded_var 
)

Definition at line 89 of file loc_env_var_handler.c.

91{
92 char *tmp;
93 char *tmp_2;
94
95 tmp = ft_strjoin_free(processed_arg, expanded_var);
96 tmp_ad = tmp_adj(tmp);
97 free(expanded_var);
98 tmp_2 = ft_strdup(tmp_ad);
99 free(tmp_ad);
100 return (tmp_2);
101}
char * ft_strjoin_free(char *s1, char *s2)
char * ft_strdup(const char *s)
Definition ft_strdup.c:23
char * tmp_adj(char *arg)

References ft_strdup(), ft_strjoin_free(), and tmp_adj().

Referenced by process_argument().

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

◆ handle_local_vars()

void handle_local_vars ( t_ms_data data,
char *  arg 
)

Definition at line 69 of file loc_env_var_handler_utils.c.

70{
71 char *p;
72 int valid_var;
73
74 p = arg;
75 valid_var = 1;
76 if (arg[0] != '=' && ft_strchr(arg, '='))
77 {
78 while (p < ft_strchr(arg, '='))
79 {
80 if (!ft_isalnum(*p++))
81 {
82 valid_var = 0;
83 break ;
84 }
85 }
86 if (valid_var)
88 }
89}
int handle_add_set_shell_variable(t_env **shell_var, char *line)
int ft_isalnum(int c)
Definition ft_isalnum.c:15
char * ft_strchr(const char *s, int c)
Definition ft_strchr.c:25
t_env * shell_variables
Definition shell.h:25

Referenced by post_process_command_args().

Here is the caller graph for this function:

◆ handle_split_allocation()

void handle_split_allocation ( t_ast command_node,
int *  current_size,
int  required_size 
)

Definition at line 18 of file loc_env_var_handler.c.

20{
21 if (required_size > *current_size)
22 {
23 command_node->args = ft_realloc_array(command_node->args, \
24 *current_size, required_size);
25 *current_size = required_size;
26 }
27}
char ** ft_realloc_array(char **array, int old_size, int new_size)
char ** args
Definition tokens.h:52

References s_ast::args, and ft_realloc_array().

Referenced by split_loc_vars().

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

◆ post_process_command_args()

void post_process_command_args ( t_ast command_node,
int  arg_count,
t_ms_data data 
)

Definition at line 59 of file loc_env_var_handler.c.

61{
62 int i;
63 char *processed_arg;
64 int current_size;
65 char *tmp_proc_arg;
66
67 i = 0;
68 tmp_proc_arg = NULL;
69 current_size = arg_count;
70 while (i < current_size)
71 {
72 if (!is_in_single_quotes(command_node->args[i]))
73 {
74 handle_local_vars(data, command_node->args[i]);
75 tmp_proc_arg = process_argument(command_node->args[i], data);
76 }
77 else
78 tmp_proc_arg = ft_substr(command_node->args[i], 1, \
79 ft_strlen(command_node->args[i]) - 2);
80 free(command_node->args[i]);
81 processed_arg = ft_remove_quotes(tmp_proc_arg, '\"');
82 free(tmp_proc_arg);
83 split_loc_vars(command_node, processed_arg, &current_size, &i);
84 free(processed_arg);
85 }
86 command_node->args[current_size] = NULL;
87}
char * ft_substr(char const *s, unsigned int start, size_t len)
Definition ft_substr.c:27
char * ft_remove_quotes(char *str, char quote_type)
size_t ft_strlen(const char *s)
Definition ft_strlen.c:15
void handle_local_vars(t_ms_data *data, char *arg)
void split_loc_vars(t_ast *command_node, char *processed_arg, int *current_size, int *i)
char * process_argument(char *arg, t_ms_data *data)
int is_in_single_quotes(char *arg)

References s_ast::args, ft_remove_quotes(), ft_strlen(), ft_substr(), handle_local_vars(), is_in_single_quotes(), process_argument(), and split_loc_vars().

Referenced by manage_commands().

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

◆ process_argument()

char * process_argument ( char *  arg,
t_ms_data data 
)

Definition at line 103 of file loc_env_var_handler.c.

104{
105 char *start;
106 char *processed_arg;
107 char *tmp_ad;
108 char *expanded_var;
109
110 tmp_ad = NULL;
111 processed_arg = ft_strdup("");
112 start = arg;
113 while (*start != '\0')
114 {
115 if (*start == '$')
116 {
117 expanded_var = expand_variable(&start, data);
118 if (expanded_var != NULL)
119 {
120 processed_arg = append_expanded_var(processed_arg, \
121 tmp_ad, expanded_var);
122 free(tmp_ad);
123 }
124 }
125 else
126 processed_arg = append_literal(&start, processed_arg);
127 }
128 return (processed_arg);
129}
char * append_expanded_var(char *processed_arg, char *tmp_ad, char *expanded_var)
char * append_literal(char **start, char *processed_arg)
char * expand_variable(char **start, t_ms_data *data)

References append_expanded_var(), append_literal(), expand_variable(), and ft_strdup().

Referenced by post_process_command_args().

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

◆ split_loc_vars()

void split_loc_vars ( t_ast command_node,
char *  processed_arg,
int *  current_size,
int *  i 
)

Definition at line 29 of file loc_env_var_handler.c.

31{
32 char **split_arg;
33 int split_count;
34 int required_size;
35 int j;
36
37 split_arg = ft_split(processed_arg, ' ');
38 split_count = ft_len_2d_arr(split_arg);
39 if (split_count > 1)
40 {
41 required_size = *i + split_count;
42 handle_split_allocation(command_node, current_size, required_size);
43 j = 0;
44 while (j < split_count)
45 {
46 command_node->args[*i + j] = ft_strdup(split_arg[j]);
47 j++;
48 }
49 *i += split_count;
50 }
51 else
52 {
53 command_node->args[*i] = ft_strdup(processed_arg);
54 (*i)++;
55 }
56 ft_free_2d_arr(split_arg);
57}
void ft_free_2d_arr(char **arr)
char ** ft_split(char const *s, char c)
Definition ft_split.c:95
int ft_len_2d_arr(char **array)
void handle_split_allocation(t_ast *command_node, int *current_size, int required_size)

References s_ast::args, ft_free_2d_arr(), ft_len_2d_arr(), ft_split(), ft_strdup(), and handle_split_allocation().

Referenced by post_process_command_args().

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