]> git.dkaiser.de - 42/minishell.git/commitdiff
Move assign into cmd node
authorDominik Kaiser <dkaiser@1-C-7.42heilbronn.de>
Mon, 8 Jul 2024 14:15:32 +0000 (16:15 +0200)
committerDominik Kaiser <dkaiser@1-C-7.42heilbronn.de>
Mon, 8 Jul 2024 14:15:32 +0000 (16:15 +0200)
include/ast.h
src/free_node.c
src/new_node.c

index 356ccddb1691f5d7f25ab7a6a19430056c6032dd..6479272b884809ffa44f4450a23168d5b965ea6f 100644 (file)
@@ -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);
index 8f32c12e94b0d8a7f02d879841ae9686d4393efb..8664a073056a75ba470246a61daee21a97e8d9b3 100644 (file)
@@ -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);
+}
index 4cdbf9a13d8fb8dc623325d123c09953af922d13..c334eb6cd4803a63b9d850b0012c5027c240f39b 100644 (file)
@@ -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);