-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathminishell.h
242 lines (230 loc) · 8.33 KB
/
minishell.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* minishell.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: ler-rech <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/10/12 10:12:11 by ler-rech #+# #+# */
/* Updated: 2021/03/18 16:32:40 by ler-rech ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef MINISHELL_H
# define MINISHELL_H
# include <sys/stat.h>
# include <stdint.h>
# include <unistd.h>
# include <string.h>
# include <stdio.h>
# include <stdlib.h>
# include <stdarg.h>
# include <math.h>
# include <limits.h>
# include <fcntl.h>
# include <sys/errno.h>
# include "libft/libft.h"
# include "parsing/errors/errors.h"
# include <sys/wait.h>
# include "get_next_line/gnl_term.h"
# include <term.h>
# include <termios.h>
# include <curses.h>
# define PROMPT "user@minishell$ "
# define EXIT_SUCCESS 0
# define EXIT_FAILURE 1
# define LEFT_REDIR 1
# define RIGHT_REDIR 2
# define DRIGHT_REDIR 3
typedef struct s_tc
{
char *name;
struct termios term;
struct termios init;
char *cm;
char *ce;
char *dl;
} t_tc;
typedef struct s_hist
{
char *s;
struct s_hist *next;
struct s_hist *prev;
} t_hist;
struct s_exist
{
int pid;
int last_exec;
int dir;
int quote;
char *line;
t_tc tc;
t_hist *hist;
t_hist *tmp_hist;
char *tmp_line;
int ambiguous;
} g_exist;
typedef struct s_redirection
{
int type;
char *file_name;
} t_redirection;
typedef struct s_command
{
char **full_args;
t_list *redirections;
} t_command;
typedef struct s_minishell
{
t_list *cmds;
char **env;
int out;
int in;
} t_minishell;
typedef struct s_data
{
int i;
char *cmd;
t_minishell *command;
t_list *pipes;
t_command *simple_cmd;
t_redirection *redirection;
int ac;
} t_data;
typedef struct s_helper1
{
t_command *command;
int **pipes_fd;
int *forks;
int commands_len;
} t_helper1;
int parse_line(char *line, t_data *data);
int get_redirection(char *line, t_data *data);
void get_command_and_args(char *line, t_data *data, int ret);
int add_cmd_to_pipes(char *line, t_data *data);
int add_pipes_to_cmds(char *line, t_data *data);
void add_last_cmd(char *line, t_data *data);
int isblank(int c);
int tab_size(char **t);
void free_tab(char **t);
void init_cmd(t_data *data);
char *get_str(char *line, int *i);
char *dquoted_str(char *line, int *i);
char *squoted_str(char *line, int *i);
char *unquoted_str(char *line, int *i);
void set_env(char **s, t_data *data);
char *get_env_value(char *key, char **env);
void free_data(t_data *data);
void scan_command(t_list *pipes, char **env);
char *handle_dquotes(char *s, int *i, char **env);
char *handle_squotes(char *s, int *i);
char *handle_noquotes(char *s, int *i, char **env);
void handle_escape(char *s, int *i, char c, char **str);
void handle_env_expansion(char *s, int *i, char **env, char **str);
int split_arg_exp(int i, t_command *cmd);
void handle_tilde_expansion(char *s, int *i, char **env, char **str);
void reset_std(t_minishell *minishell);
int read_file(char *file_name);
int create_empty_file(char *file_name);
int create_append_file(char *file_name);
int commands_loop2(t_minishell *minishell, t_list *my_pipe);
int loop_redirections2(t_redirection *redirection);
void func1(int **pipes_fd, int *forks, int commands_len);
void func2(int i, int **pipes_fd, int commands_len);
int func3(t_minishell *minishell, t_command *command,
int **pipes_fd, int *forks);
int func4(t_minishell *minishell, t_command *command);
int func5(int **pipes_fd, int *forks);
int func6(int **pipes_fd, int *forks, int commands_len);
int func7(t_minishell *minishell, t_helper1 helper, int i);
int get_next_line(int fd, char **line);
void ft_putstr_fd(char *s, int fd);
char **ft_split(char const *s, char c);
char *ft_strcpy(char *dest, char *src);
char *ft_strdup(const char *s1);
int ft_strcmp(const char *x, const char *y);
int ft_strncmp(const char *s1, const char *s2, size_t n);
char *ft_strjoin(char const *s1, char const *s2);
void ft_putchar_fd(char c, int fd);
int ft_isalpha(int c);
char *trimit(char *s);
size_t ft_strlen(const char *s);
int ft_isdigit(int c);
char **get_paths2(char **paths, char *tmp, char **env, int i);
char **get_paths(char **env);
char *found_exec2(char **paths, char *tmp1);
char *found_exec(t_command *command, t_minishell *minishell);
int ft_str_has_char(const char *s, int c);
int env_compair(char *var1, char *var2);
int vars_counter_and_update(char **new_vars, char **env);
int var_exist(char *var, char **env);
char **get_new_env(char **new_vars, char **env, int len);
int ft_is_equal(int c);
int arg_has_equal(char *str);
int ft_is_userscore(int c);
int arg_start_with_char(char *str);
int is_valid_arg(char *arg, int show_error);
int is_valid_arg2(char *arg, int show_error);
int valid_arg(char *str);
int count_valid_args(char **args);
char **set_valid_envs(t_command *command);
void free_double(char **str);
void free_double_int(int **str);
void free_commands(t_minishell *minishell);
int vars_counter_(char **new_vars, char **env);
int is_valid_arg2(char *arg, int show_error);
int count_valid_args2(char **args);
void display_env_chars(char *env);
int ex_helper1(char *arg);
void ex_helper2(char **env);
int shell_env(t_minishell *minishell);
int shell_export(t_command *command, t_minishell *minishell);
int shell_unset(t_command *command, t_minishell *minishell);
int words_counter(char **env);
char *found_exec(t_command *command, t_minishell *minishell);
void echo_display(char **full_args, int index);
void shell_parce(t_minishell *minishell, char *line);
char *shell_read(void);
int shell_execute(t_minishell *minishell, t_command *current);
int shell_launch(t_minishell *minishell, t_command *command);
int shell_cd(t_command *command, t_minishell *minishell);
int shell_exit(t_command *command, t_minishell *minishell);
int shell_echo(t_command *command, t_minishell *minishell);
t_list *ft_lstnew(void *content);
void ft_lstadd_front(t_list **alst, t_list *new);
int ft_lstsize(t_list *lst);
t_list *ft_lstlast(t_list *lst);
void ft_lstadd_back(t_list **alst, t_list *new);
void ft_lstdelone(t_list *lst, void (*del)(void *));
void ft_lstclear(t_list **lst, void (*del)(void *));
void ft_lstiter(t_list *lst, void (*f)(void *));
t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*d)(void *));
int loop_redirections(t_minishell *minishell, t_command *command);
int handle_command(t_minishell *minishell, t_command *command);
int commands_loop(t_minishell *minishell, t_list *pipe);
int pipes_loop(t_minishell *minishell);
void set_pwd_oldpwd(char *new_path,
t_minishell *minishell, int type);
int arg_exist(char *arg, t_minishell *minishell);
void export_varible(char *arg, t_minishell *minishell);
void unset_varible(char *arg, t_minishell *minishell);
void export_varible_edit(char *arg, t_minishell *minishell);
int export_arg_exist(char *full_arg, t_minishell *minishell);
int shell_pwd(t_minishell *minishell);
int export_env_compair(char *var1, char *var2);
void export_invalid_arg_msg(char *arg);
int valid_arg_export(char *str);
char *env_value(char *arg);
char **copy_env(char **env, int len);
void display_env_ordred2(char **env, int count);
int display_env_ordred(char **env);
void unset_invalid_arg_msg(char *arg);
void check_lower_case(t_command *command);
void update_env_pwd(t_data *data);
int help99(int *pwd, int *oldpwd, char **env);
int search_env(char *key, char **env, int i, int *j);
void scan_redirs(t_list *redirs, char **env);
int is_valid_env(char *arg);
int does_env_exist(char *arg, char **env);
void drop_pro(t_command *cmd, int index);
void amb_error(char *str);
#endif