Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
yabtaour
GitHub Repository: yabtaour/Minishell-42
Path: blob/main/syntax/ft_redirection.c
1407 views
1
/* ************************************************************************** */
2
/* */
3
/* ::: :::::::: */
4
/* ft_redirection.c :+: :+: :+: */
5
/* +:+ +:+ +:+ */
6
/* By: ssabbaji <[email protected]> +#+ +:+ +#+ */
7
/* +#+#+#+#+#+ +#+ */
8
/* Created: 2022/07/26 18:17:27 by yabtaour #+# #+# */
9
/* Updated: 2022/09/25 17:05:16 by ssabbaji ### ########.fr */
10
/* */
11
/* ************************************************************************** */
12
13
#include "../minishell.h"
14
15
void ft_output_err(t_data *data, char *value)
16
{
17
(void)data;
18
g_vars.g_exit_stat = 258;
19
printf("Syntax error near unexpected token `%s'\n", value);
20
}
21
22
static int ft_check_red(t_data *data)
23
{
24
t_lexer *lexer_clone;
25
26
lexer_clone = data->lst_lexer;
27
while (lexer_clone->next)
28
lexer_clone = lexer_clone->next;
29
if (lexer_clone->type == REDIRECTION)
30
{
31
g_vars.g_exit_stat = 258;
32
printf("Syntax error near unexpected token `newline'\n");
33
return (258);
34
}
35
lexer_clone = data->lst_lexer;
36
while (lexer_clone)
37
{
38
if (lexer_clone->type == REDIRECTION
39
&& ft_strlen(lexer_clone->val) > 2)
40
{
41
ft_output_err(data, lexer_clone->val);
42
return (g_vars.g_exit_stat);
43
}
44
lexer_clone = lexer_clone->next;
45
}
46
return (g_vars.g_exit_stat);
47
}
48
49
static int ft_check_type(int lexer_clone_type)
50
{
51
if (lexer_clone_type == PIPE || lexer_clone_type == REDIRECTION)
52
return (1);
53
return (0);
54
}
55
56
static int ft_check_after_red(t_data *data)
57
{
58
t_lexer *lexer_clone;
59
60
lexer_clone = data->lst_lexer;
61
while (lexer_clone)
62
{
63
if (lexer_clone->type == REDIRECTION)
64
{
65
lexer_clone = lexer_clone->next;
66
while (lexer_clone->next)
67
{
68
if (ft_check_type(lexer_clone->type))
69
{
70
ft_output_err(data, lexer_clone->val);
71
return (g_vars.g_exit_stat);
72
}
73
else
74
break ;
75
lexer_clone = lexer_clone->next;
76
}
77
}
78
lexer_clone = lexer_clone->next;
79
}
80
return (g_vars.g_exit_stat);
81
}
82
83
int ft_check_redirection(t_data *data)
84
{
85
g_vars.g_exit_stat = ft_check_red(data);
86
if (g_vars.g_exit_stat)
87
return (g_vars.g_exit_stat);
88
g_vars.g_exit_stat = ft_check_after_red(data);
89
if (g_vars.g_exit_stat)
90
return (g_vars.g_exit_stat);
91
return (g_vars.g_exit_stat);
92
}
93
94