aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Kaiser2024-07-08 16:15:32 +0200
committerDominik Kaiser2024-07-08 16:15:32 +0200
commit5316c9880416b77b4b97b07fd6ae47f171a0ba23 (patch)
tree45d3a48b156895d5a9101d8aca293daabb69c4bb
parentbc5e39df2154abfdf308b6cbe644b8953586be2d (diff)
downloadminishell-5316c9880416b77b4b97b07fd6ae47f171a0ba23.tar.gz
minishell-5316c9880416b77b4b97b07fd6ae47f171a0ba23.zip
Move assign into cmd node
-rw-r--r--include/ast.h8
-rw-r--r--src/free_node.c24
-rw-r--r--src/new_node.c17
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);