diff options
| -rw-r--r-- | include/ast.h | 8 | ||||
| -rw-r--r-- | src/free_node.c | 24 | ||||
| -rw-r--r-- | src/new_node.c | 17 |
3 files changed, 25 insertions, 24 deletions
diff --git a/include/ast.h b/include/ast.h index 356ccdd..6479272 100644 --- a/include/ast.h +++ b/include/ast.h @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/27 11:48:27 by dkaiser #+# #+# */ -/* Updated: 2024/07/01 11:43:59 by dkaiser ### ########.fr */ +/* Updated: 2024/07/08 16:09:32 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,7 +15,6 @@ enum e_node_type { - ASSIGN_NODE, PIPE_NODE, CMD_NODE, STRING_NODE @@ -50,12 +49,12 @@ typedef struct s_redirection typedef struct s_cmd { char **args; + struct s_assign **assigns; struct s_redirection redirs[2]; } t_cmd; union u_node_content { - struct s_assign assign; struct s_pipe pipe; struct s_cmd cmd; char *string; @@ -68,7 +67,6 @@ typedef struct s_node } t_node; t_node *new_node(int type); -t_node *new_assign_node(char *var, char *value); t_node *new_pipe_node(t_node *left, t_node *right); -t_node *new_cmd_node(char **args, t_redirection redirs[2]); +t_node *new_cmd_node(char **args, t_assign **assigns, t_redirection redirs[2]); t_node *new_string_node(char *string); diff --git a/src/free_node.c b/src/free_node.c index 8f32c12..8664a07 100644 --- a/src/free_node.c +++ b/src/free_node.c @@ -6,21 +6,19 @@ /* 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 */ +/* Updated: 2024/07/08 16:15:21 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); +static void free_assigns(t_assign **assigns); void free_node(t_node *node) { - if (node->type == ASSIGN_NODE) - free_assign_node(node); - else if (node->type == PIPE_NODE) + if (node->type == PIPE_NODE) free_pipe_node(node); else if (node->type == CMD_NODE) free_cmd_node(node); @@ -54,6 +52,22 @@ static void free_cmd_node(t_node *node) i++; } free(node->content.cmd.args); + free_assigns(node->content.cmd.assigns); free(node->content.cmd.redirs[0].specifier); free(node->content.cmd.redirs[1].specifier); } + +static void free_assigns(t_assign **assigns) +{ + int i; + + i = 0; + while (assigns[i] != NULL) + { + free(assigns[i]->var); + free(assigns[i]->value); + free(assigns[i]); + i++; + } + free(assigns); +} diff --git a/src/new_node.c b/src/new_node.c index 4cdbf9a..c334eb6 100644 --- a/src/new_node.c +++ b/src/new_node.c @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/27 11:21:03 by dkaiser #+# #+# */ -/* Updated: 2024/06/28 15:04:15 by dkaiser ### ########.fr */ +/* Updated: 2024/07/08 16:10:44 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,18 +23,6 @@ t_node *new_node(int type) return (node); } -t_node *new_assign_node(char *var, char *value) -{ - t_node *node; - - node = new_node(ASSIGN_NODE); - if (node == NULL) - return (NULL); - node->content.assign.var = var; - node->content.assign.value = value; - return (node); -} - t_node *new_pipe_node(t_node *left, t_node *right) { t_node *node; @@ -47,7 +35,7 @@ t_node *new_pipe_node(t_node *left, t_node *right) return (node); } -t_node *new_cmd_node(char **args, t_redirection redirs[2]) +t_node *new_cmd_node(char **args, t_assign **assigns, t_redirection redirs[2]) { t_node *node; @@ -55,6 +43,7 @@ t_node *new_cmd_node(char **args, t_redirection redirs[2]) if (node == NULL) return (NULL); node->content.cmd.args = args; + node->content.cmd.assigns = assigns; node->content.cmd.redirs[0] = redirs[0]; node->content.cmd.redirs[1] = redirs[1]; return (node); |
