maxishell
Implementation of a shell for Linux-like systems
Loading...
Searching...
No Matches
clean.c
Go to the documentation of this file.
1/* ************************************************************************** */
2/* */
3/* ::: :::::::: */
4/* clean_general.c :+: :+: :+: */
5/* +:+ +:+ +:+ */
6/* By: rocky <marvin@42.fr> +#+ +:+ +#+ */
7/* +#+#+#+#+#+ +#+ */
8/* Created: 2024/06/11 14:56:25 by rocky #+# #+# */
9/* Updated: 2024/09/09 15:41:16 by dmdemirk ### ########.fr */
10/* */
11/* ************************************************************************** */
12
13#include "tokens.h"
14#include "env.h"
15#include "exit_status.h"
16
17void free_args(char **args);
18void free_env_list(t_env *env);
19void free_ms_data(t_ms_data *data);
20void loop_cleanup(t_loop_data *loop_data, t_token *tokens_head);
21void free_ast(t_ast *node);
22void free_all_tokens(t_token *tokens);
23
24void free_args(char **args)
25{
26 int i;
27
28 i = 0;
29 if (args)
30 {
31 while (args[i] != NULL)
32 free(args[i++]);
33 free(args);
34 }
35}
36
38{
39 t_env *temp;
40
41 while (env)
42 {
43 temp = env;
44 env = env->next;
45 free(env->key);
46 free(env->value);
47 free(temp);
48 }
49}
50
52{
53 if (data)
54 {
57 free(data->current_dir);
58 if (data->std_in >= 0)
59 close(data->std_in);
60 if (data->std_out >= 0)
61 close(data->std_out);
62 if (data->std_err >= 0)
63 close(data->std_err);
64 }
65}
66
67void loop_cleanup(t_loop_data *loop_data, t_token *tokens_head)
68{
69 free(loop_data->trimmed_input);
70 free_all_tokens(tokens_head);
71 free_ast(loop_data->tree);
72}
73
74void free_ast(t_ast *node)
75{
76 int i;
77
78 i = 0;
79 if (!node)
80 return ;
81 if (node->args)
82 {
83 while (node->args && node->args[i])
84 {
85 free(node->args[i]);
86 i++;
87 }
88 free(node->args);
89 }
90 free_ast(node->left);
91 free_ast(node->right);
92 free(node);
93}
void free_ast(t_ast *node)
Definition clean.c:74
void loop_cleanup(t_loop_data *loop_data, t_token *tokens_head)
Definition clean.c:67
void free_all_tokens(t_token *tokens)
Definition clean_utils.c:17
void free_env_list(t_env *env)
Definition clean.c:37
void free_args(char **args)
Definition clean.c:24
void free_ms_data(t_ms_data *data)
Definition clean.c:51
void free_shell_var_list(t_env *shell_var)
Definition tokens.h:50
char ** args
Definition tokens.h:52
struct s_ast * right
Definition tokens.h:54
struct s_ast * left
Definition tokens.h:53
Definition env.h:17
struct s_env * next
Definition env.h:20
char * key
Definition env.h:18
char * value
Definition env.h:19
char * trimmed_input
Definition tokens.h:61
t_ast * tree
Definition tokens.h:63
t_env * envp
Definition shell.h:24
int std_err
Definition shell.h:28
int std_out
Definition shell.h:27
t_env * shell_variables
Definition shell.h:25
char * current_dir
Definition shell.h:29
int std_in
Definition shell.h:26