Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
yabtaour
GitHub Repository: yabtaour/Minishell-42
Path: blob/main/expanding/expanding_utils.c
1407 views
1
/* ************************************************************************** */
2
/* */
3
/* ::: :::::::: */
4
/* expanding_utils.c :+: :+: :+: */
5
/* +:+ +:+ +:+ */
6
/* By: yabtaour <[email protected]> +#+ +:+ +#+ */
7
/* +#+#+#+#+#+ +#+ */
8
/* Created: 2022/07/26 18:16:21 by yabtaour #+# #+# */
9
/* Updated: 2022/07/26 18:16:22 by yabtaour ### ########.fr */
10
/* */
11
/* ************************************************************************** */
12
13
#include "../minishell.h"
14
15
int ft_change_flag(int flag)
16
{
17
if (flag == 0)
18
return (1);
19
if (flag == 0)
20
return (0);
21
return (0);
22
}
23
24
char *ft_get_value(t_data *data, char *var)
25
{
26
t_env *env_clone;
27
28
env_clone = data->lst_env;
29
while (env_clone)
30
{
31
if (!ft_strcmp(env_clone->name, var))
32
return (env_clone->value);
33
env_clone = env_clone->next;
34
}
35
return (NULL);
36
}
37
38
int ft_check_var_env(t_data *data, char *var)
39
{
40
t_env *env_clone;
41
42
env_clone = data->lst_env;
43
while (env_clone)
44
{
45
if (!ft_strcmp(env_clone->name, var))
46
return (1);
47
env_clone = env_clone->next;
48
}
49
return (0);
50
}
51
52
char *ft_delete_variable(char *var, int i)
53
{
54
char *new;
55
56
i++;
57
new = NULL;
58
while (var[i] && !ft_isspace(var[i]) && var[i] != '$'
59
&& var[i] != '\\' && var[i] != '"' && var[i] != '='
60
&& var[i] != '\'')
61
{
62
i++;
63
if (var[i] >= '0' && var[i] <= '9')
64
break ;
65
}
66
if (var[i])
67
new = ft_substr(var, i, ft_len_after(var));
68
return (new);
69
}
70
71
char *ft_delete_var(t_data *data, char *var)
72
{
73
char *new_var;
74
int i;
75
76
i = 0;
77
data->flag_s = 0;
78
data->flag_d = 0;
79
new_var = NULL;
80
while (data->flag_s == 1 || (var[i] && var[i] != '$'))
81
{
82
if (var[i] == '"' && data->flag_s == 0)
83
data->flag_d = ft_change_flag(data->flag_d);
84
if (var[i] == '\'' && data->flag_d == 0)
85
data->flag_s = ft_change_flag(data->flag_s);
86
i++;
87
}
88
if (data->flag_s == 0 && var[i] && var[i] == '$')
89
new_var = ft_delete_variable(var, i);
90
return (new_var);
91
}
92
93