Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
yabtaour
GitHub Repository: yabtaour/Minishell-42
Path: blob/main/parsing/parsing_utils5.c
1407 views
1
/* ************************************************************************** */
2
/* */
3
/* ::: :::::::: */
4
/* parsing_utils5.c :+: :+: :+: */
5
/* +:+ +:+ +:+ */
6
/* By: ssabbaji <[email protected]> +#+ +:+ +#+ */
7
/* +#+#+#+#+#+ +#+ */
8
/* Created: 2022/07/26 18:17:17 by yabtaour #+# #+# */
9
/* Updated: 2022/09/19 16:29:22 by ssabbaji ### ########.fr */
10
/* */
11
/* ************************************************************************** */
12
13
#include "../minishell.h"
14
15
void ft_delete_node_red(t_data *data, int position)
16
{
17
t_lexer *lexer_clone;
18
t_lexer *lexer_clone2;
19
int i;
20
21
i = -1;
22
lexer_clone = data->lst_lexer;
23
while (lexer_clone && ++i < position)
24
lexer_clone = lexer_clone->next;
25
if (lexer_clone)
26
{
27
if (lexer_clone && lexer_clone->next)
28
lexer_clone->next->prev = lexer_clone->prev;
29
if (lexer_clone && lexer_clone->prev)
30
lexer_clone->prev->next = lexer_clone->next;
31
lexer_clone2 = lexer_clone->next;
32
free(lexer_clone->val);
33
free(lexer_clone);
34
lexer_clone = lexer_clone2;
35
}
36
if (!i)
37
data->lst_lexer = lexer_clone;
38
}
39
40
void ft_delete_red_norme(t_data *data, int position, int flag)
41
{
42
t_lexer *lexer_clone;
43
44
lexer_clone = data->lst_lexer;
45
while (lexer_clone && lexer_clone->type != PIPE)
46
{
47
flag = 0;
48
if (lexer_clone && lexer_clone->type == REDIRECTION
49
&& ft_strcmp(lexer_clone->val, "<<"))
50
{
51
flag = 1;
52
position++;
53
lexer_clone = lexer_clone->next;
54
while (lexer_clone && lexer_clone->type != REDIRECTION)
55
{
56
ft_delete_node_red(data, position);
57
position--;
58
lexer_clone = lexer_clone->prev;
59
}
60
ft_delete_node_red(data, position);
61
}
62
if (!flag)
63
position++;
64
if (lexer_clone)
65
lexer_clone = lexer_clone->next;
66
}
67
}
68
69
void ft_delete_redirections(t_data *data)
70
{
71
t_lexer *lexer_clone;
72
int position;
73
74
while (ft_check_still_redirection(data))
75
{
76
ft_delete_red_norme(data, 0, 0);
77
lexer_clone = data->lst_lexer;
78
position = 0;
79
while (lexer_clone && lexer_clone->type != PIPE)
80
{
81
if (lexer_clone && lexer_clone->type == REDIRECTION
82
&& ft_strcmp(lexer_clone->val, "<<"))
83
ft_delete_node_red(data, position);
84
position++;
85
lexer_clone = lexer_clone->next;
86
}
87
lexer_clone = data->lst_lexer;
88
}
89
}
90
91
char *ft_new(char *old)
92
{
93
char *new;
94
int len;
95
96
len = ft_strlen(old);
97
new = NULL;
98
if (ft_exist_quotes(old))
99
{
100
new = ft_delete(old);
101
return (new);
102
}
103
else
104
{
105
new = ft_substr(old, 0, len);
106
return (new);
107
}
108
}
109
110