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