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