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