From 2f2509f1c91b1e560ee8e6888feeab5b1414e8f0 Mon Sep 17 00:00:00 2001 From: Matteo Flebus Date: Thu, 22 Jan 2026 17:19:17 +0100 Subject: [PATCH] fix: clean merge of pretty-print with no memory leaks --- src/utils/ast/ast.c | 61 ++++++--------------------------------------- 1 file changed, 7 insertions(+), 54 deletions(-) diff --git a/src/utils/ast/ast.c b/src/utils/ast/ast.c index 910fd10..e336a73 100644 --- a/src/utils/ast/ast.c +++ b/src/utils/ast/ast.c @@ -1,3 +1,5 @@ +#define _POSIX_C_SOURCE 12344 + #include "ast.h" #include @@ -8,9 +10,8 @@ void ast_free(struct ast **node) { - if (!node) - if (*node == NULL) - return; + if (*node == NULL) + return; // ast void does not need to be freed. if (ast_is_if(*node)) ast_free_if(ast_get_if(*node)); @@ -22,6 +23,9 @@ void ast_free(struct ast **node) ast_free_and_or(ast_get_and_or(*node)); else if (ast_is_redir(*node)) ast_free_redir(ast_get_redir(*node)); + + free(*node); + *node = NULL; } struct ast *ast_create(enum ast_type type, void *data) @@ -36,57 +40,6 @@ struct ast *ast_create(enum ast_type type, void *data) return node; } -/* struct ast *ast_create_if(struct ast *condition, struct ast *then_clause, - struct ast *else_clause) -{ - struct ast_if *if_data = malloc(sizeof(struct ast_if)); - if (!if_data) - return NULL; - - if_data->condition = condition; - if_data->then_clause = then_clause; - if_data->else_clause = else_clause; - - return ast_create(AST_IF, if_data); -} - -struct ast *ast_create_cmd(struct list *cmd) -{ - struct ast_cmd *cmd_data = malloc(sizeof(struct ast_cmd)); - if (!cmd_data) - return NULL; - - cmd_data->cmd = cmd; - - return ast_create(AST_CMD, cmd_data); -} */ -/* -bool ast_is_if(struct ast *node) -{ - assert(node != NULL); - return node->type == AST_IF; -} - -bool ast_is_cmd(struct ast *node) -{ - assert(node != NULL); - return node->type == AST_CMD; -} - -struct ast_if *ast_get_if(struct ast *node) -{ - assert(node != NULL); - assert(node->type == AST_IF); - return (struct ast_if *)node->data; -} - -struct ast_cmd *ast_get_cmd(struct ast *node) -{ - assert(node != NULL); - assert(node->type == AST_CMD); - return (struct ast_cmd *)node->data; -} - */ static void ast_print_dot_recursive(struct ast *node, FILE *out) { if (!node)