crash fix
This commit is contained in:
6
.gitignore
vendored
6
.gitignore
vendored
@@ -2,3 +2,9 @@ minishell
|
||||
.objs/*
|
||||
ast.xml
|
||||
.TEST_objs
|
||||
|
||||
file
|
||||
file2
|
||||
file3
|
||||
file4
|
||||
file5
|
||||
|
||||
@@ -24,7 +24,7 @@ char *ft_tabstr(char **tab)
|
||||
while (tab[++i])
|
||||
alloc_count += ft_strlen(tab[i]) + 1;
|
||||
i = 0;
|
||||
out = tab[0];
|
||||
out = ft_strdup(tab[0]);
|
||||
while (tab[++i])
|
||||
{
|
||||
tmp = out;
|
||||
|
||||
@@ -17,34 +17,39 @@ static void free_redirs(t_ast_n *node)
|
||||
free(node->redir);
|
||||
if (node->files)
|
||||
free_tab(node->files);
|
||||
}
|
||||
|
||||
static void free_cmd(t_ast_n *node)
|
||||
{
|
||||
free(node->cmd);
|
||||
free_redirs(node);
|
||||
free_tab(node->args);
|
||||
}
|
||||
|
||||
static void free_pline(t_ast_n *node)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = -1;
|
||||
while (node->pline[++i])
|
||||
free_ast(node->pline[i]);
|
||||
}
|
||||
|
||||
void free_ast(t_ast_n *node)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (node->state == _AND || node->state == _OR)
|
||||
{
|
||||
free_ast(node->left);
|
||||
free_ast(node->right);
|
||||
}
|
||||
else if (node->state == _PLINE)
|
||||
{
|
||||
i = -1;
|
||||
while (node->pline[++i])
|
||||
free_ast(node->pline[i]);
|
||||
}
|
||||
else if (node->state == _SUBSH)
|
||||
{
|
||||
free_ast(node->left);
|
||||
free_redirs(node);
|
||||
}
|
||||
else if (node->state == _PLINE)
|
||||
free_pline(node);
|
||||
else
|
||||
{
|
||||
free(node->cmd);
|
||||
free_redirs(node);
|
||||
}
|
||||
|
||||
free_cmd(node);
|
||||
free(node);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user