diff options
| author | Dominik Kaiser | 2024-06-28 15:09:32 +0200 |
|---|---|---|
| committer | GitHub | 2024-06-28 15:09:32 +0200 |
| commit | 8103cadfc95fb76539bfccc893a2101ccb89ea90 (patch) | |
| tree | b46379099324f76f2496909b4de3cd71de8b772a /src/free_node.c | |
| parent | 031685832d8267acc2fa46ea9732b8e95eb34463 (diff) | |
| download | minishell-8103cadfc95fb76539bfccc893a2101ccb89ea90.tar.gz minishell-8103cadfc95fb76539bfccc893a2101ccb89ea90.zip | |
Add data structures for tokenizing and parsing
* Add data structures and helper functions for ast
* Add data structures for tokenizing
* Add helper functions for token structures
* Include token.h in minishell.h
* Add new/free functions for nodes/tokens to Makefile
* Add UNREACHABLE macro to debug_tools.h
Diffstat (limited to 'src/free_node.c')
| -rw-r--r-- | src/free_node.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/free_node.c b/src/free_node.c new file mode 100644 index 0000000..8f32c12 --- /dev/null +++ b/src/free_node.c @@ -0,0 +1,59 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* free_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/27 11:41:46 by dkaiser #+# #+# */ +/* Updated: 2024/06/28 14:55:50 by dkaiser ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ast.h" + +static void free_assign_node(t_node *node); +static void free_pipe_node(t_node *node); +static void free_cmd_node(t_node *node); + +void free_node(t_node *node) +{ + if (node->type == ASSIGN_NODE) + free_assign_node(node); + else if (node->type == PIPE_NODE) + free_pipe_node(node); + else if (node->type == CMD_NODE) + free_cmd_node(node); + else if (node->type == STRING_NODE) + free(node->content.string); + else + panic(UNREACHABLE); + free(node); +} + +static void free_assign_node(t_node *node) +{ + free(node->content.assign.var); + free(node->content.assign.value); +} + +static void free_pipe_node(t_node *node) +{ + free_node(node->content.pipe.left); + free_node(node->content.pipe.right); +} + +static void free_cmd_node(t_node *node) +{ + int i; + + i = 0; + while (node->content.cmd.args[i] != NULL) + { + free(node->content.cmd.args[i]); + i++; + } + free(node->content.cmd.args); + free(node->content.cmd.redirs[0].specifier); + free(node->content.cmd.redirs[1].specifier); +} |
