From ea90a00c33e8f5528ddfb61aa4b5442ad01eb6bf Mon Sep 17 00:00:00 2001 From: Quinten Date: Sun, 23 Feb 2025 12:46:02 +0100 Subject: [PATCH] merge main into quitnen --- Makefile | 156 +++++++++++++++++----------------- inc/debug.h | 44 +++++----- inc/minishell.h | 100 +++++++++++----------- inc/parser.h | 46 +++++----- inc/utils.h | 58 ++++++------- src/debug/print_commands.c | 104 +++++++++++------------ src/main.c | 86 +++++++++---------- src/utils/check_malloc.c | 46 +++++----- src/utils/error_msg.c | 68 +++++++-------- src/utils/free_command_list.c | 124 +++++++++++++-------------- src/utils/ft_malloc_safe.c | 44 +++++----- src/utils/ft_strdup_safe.c | 44 +++++----- src/utils/ft_strjoin_safe.c | 46 +++++----- 13 files changed, 483 insertions(+), 483 deletions(-) diff --git a/Makefile b/Makefile index 8e3044a..7a679b7 100644 --- a/Makefile +++ b/Makefile @@ -1,78 +1,78 @@ -# **************************************************************************** # -# # -# :::::::: # -# Makefile :+: :+: # -# +:+ # -# By: marvin +#+ # -# +#+ # -# Created: 2024/10/15 11:48:46 by whaffman #+# #+# # -# Updated: 2025/02/23 12:28:40 by Quinten ######## odam.nl # -# # -# **************************************************************************** # - -NAME = minishell - -SRC_PATH = src -INC_PATH = inc -LIB_PATH = lib - -LIBFT_PATH = $(LIB_PATH)/libft -LIBFT_INC_PATH = $(LIBFT_PATH)/inc -LIBFT = $(LIBFT_PATH)/libft.a - -OBJ_PATH = obj - -VPATH = src:src/environment:src/prompt:src/lexer:src/token:src/utils: -VPATH += src/executor:src/parser:src/expander:src/debug:src/signal:src/builtin -VPATH += src/redirect -SOURCES = $(shell basename -a $(shell find $(SRC_PATH) -type f -name "*.c")) - -OBJECTS = $(addprefix $(OBJ_PATH)/, $(SOURCES:.c=.o)) -DEPENDS = ${OBJECTS:.o=.d} - -CC = cc -RM = rm -rf - -INCLUDES = -I./$(INC_PATH) -I./$(LIBFT_INC_PATH) -CFLAGS = -Wall -Wextra -Werror -fsanitize=address,undefined -MMD -g3 - -UNAME_S := $(shell uname -s) -ifeq ($(UNAME_S),Linux) - LDLIBS := -L$(LIBFT_PATH) -lft -lreadline -endif - -all: $(NAME) - echo $(SOURCES) - -$(NAME): $(LIBFT) $(OBJECTS) - $(CC) $(CFLAGS) $(OBJECTS) $(LDLIBS) -o $(NAME) - --include ${DEPENDS} - -$(LIBFT): $(LIBFT_PATH) - $(MAKE) -C $(LIBFT_PATH) - -$(LIBFT_PATH): - git submodule add https://gitea.duinvoetje.nl/willem/libft.git $(LIBFT_PATH) - -$(OBJ_PATH): - mkdir -p $@ - -$(OBJ_PATH)/%.o: %.c $(LIBFT) | $(OBJ_PATH) - $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ - -clean: - $(RM) $(OBJECTS) $(OBJ_PATH) - $(MAKE) -C $(LIBFT_PATH) clean - - -fclean: clean - $(RM) $(NAME) - $(MAKE) -C $(LIBFT_PATH) fclean - -re: fclean all - -run: all - ./$(NAME) - -.PHONY: all clean fclean re run +# **************************************************************************** # +# # +# :::::::: # +# Makefile :+: :+: # +# +:+ # +# By: marvin +#+ # +# +#+ # +# Created: 2024/10/15 11:48:46 by whaffman #+# #+# # +# Updated: 2025/02/23 12:28:40 by Quinten ######## odam.nl # +# # +# **************************************************************************** # + +NAME = minishell + +SRC_PATH = src +INC_PATH = inc +LIB_PATH = lib + +LIBFT_PATH = $(LIB_PATH)/libft +LIBFT_INC_PATH = $(LIBFT_PATH)/inc +LIBFT = $(LIBFT_PATH)/libft.a + +OBJ_PATH = obj + +VPATH = src:src/environment:src/prompt:src/lexer:src/token:src/utils: +VPATH += src/executor:src/parser:src/expander:src/debug:src/signal:src/builtin +VPATH += src/redirect +SOURCES = $(shell basename -a $(shell find $(SRC_PATH) -type f -name "*.c")) + +OBJECTS = $(addprefix $(OBJ_PATH)/, $(SOURCES:.c=.o)) +DEPENDS = ${OBJECTS:.o=.d} + +CC = cc +RM = rm -rf + +INCLUDES = -I./$(INC_PATH) -I./$(LIBFT_INC_PATH) +CFLAGS = -Wall -Wextra -Werror -fsanitize=address,undefined -MMD -g3 + +UNAME_S := $(shell uname -s) +ifeq ($(UNAME_S),Linux) + LDLIBS := -L$(LIBFT_PATH) -lft -lreadline +endif + +all: $(NAME) + echo $(SOURCES) + +$(NAME): $(LIBFT) $(OBJECTS) + $(CC) $(CFLAGS) $(OBJECTS) $(LDLIBS) -o $(NAME) + +-include ${DEPENDS} + +$(LIBFT): $(LIBFT_PATH) + $(MAKE) -C $(LIBFT_PATH) + +$(LIBFT_PATH): + git submodule add https://gitea.duinvoetje.nl/willem/libft.git $(LIBFT_PATH) + +$(OBJ_PATH): + mkdir -p $@ + +$(OBJ_PATH)/%.o: %.c $(LIBFT) | $(OBJ_PATH) + $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ + +clean: + $(RM) $(OBJECTS) $(OBJ_PATH) + $(MAKE) -C $(LIBFT_PATH) clean + + +fclean: clean + $(RM) $(NAME) + $(MAKE) -C $(LIBFT_PATH) fclean + +re: fclean all + +run: all + ./$(NAME) + +.PHONY: all clean fclean re run diff --git a/inc/debug.h b/inc/debug.h index 174135e..9c11cdd 100644 --- a/inc/debug.h +++ b/inc/debug.h @@ -1,22 +1,22 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* debug.h :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: qmennen +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/02/18 20:06:53 by qmennen #+# #+# */ -/* Updated: 2025/02/18 20:10:49 by qmennen ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#ifndef DEBUG_H -# define DEBUG_H - -# include "minishell.h" - -void print_commands(void *param); -void token_print(void *param); -void print_redirects(void *param); - -#endif +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* debug.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/18 20:06:53 by qmennen #+# #+# */ +/* Updated: 2025/02/18 20:10:49 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef DEBUG_H +# define DEBUG_H + +# include "minishell.h" + +void print_commands(void *param); +void token_print(void *param); +void print_redirects(void *param); + +#endif diff --git a/inc/minishell.h b/inc/minishell.h index 6b60f96..78bc2cf 100644 --- a/inc/minishell.h +++ b/inc/minishell.h @@ -1,50 +1,50 @@ -/* ************************************************************************** */ -/* */ -/* :::::::: */ -/* minishell.h :+: :+: */ -/* +:+ */ -/* By: marvin +#+ */ -/* +#+ */ -/* Created: 2025/02/04 16:13:13 by whaffman #+# #+# */ -/* Updated: 2025/02/23 12:28:23 by Quinten ######## odam.nl */ -/* */ -/* ************************************************************************** */ - -#ifndef MINISHELL_H -# define MINISHELL_H - -# include "allowed.h" -# include "libft.h" -# include "typedef.h" -# include "signals.h" -# include "environment.h" -# include "prompt.h" -# include "tokenizer.h" -# include "builtin.h" -# include "executor.h" -# include "parser.h" -# include "expander.h" -# include "redirect.h" -# include "debug.h" -# include "utils.h" - -# define TRUE 1 -# define FALSE 0 - -# define SUCCESS 1 -# define FAILURE 0 - -# define BOLD "\001\033[1m\002" -# define RED "\001\033[0;31m\002" -# define GREEN "\001\033[0;32m\002" -# define YELLOW "\001\033[0;33m\002" -# define BLUE "\001\033[0;34m\002" -# define MAGENTA "\001\033[0;35m\002" -# define CYAN "\001\033[0;36m\002" -# define RESET "\001\033[0m\002" -# define PROMPT RESET "🐚" GREEN "minishell" RESET ": " -# define PROMPT_LEN 51 - -void token_print(void *param); - -#endif +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* minishell.h :+: :+: */ +/* +:+ */ +/* By: marvin +#+ */ +/* +#+ */ +/* Created: 2025/02/04 16:13:13 by whaffman #+# #+# */ +/* Updated: 2025/02/23 12:28:23 by Quinten ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#ifndef MINISHELL_H +# define MINISHELL_H + +# include "allowed.h" +# include "libft.h" +# include "typedef.h" +# include "signals.h" +# include "environment.h" +# include "prompt.h" +# include "tokenizer.h" +# include "builtin.h" +# include "executor.h" +# include "parser.h" +# include "expander.h" +# include "redirect.h" +# include "debug.h" +# include "utils.h" + +# define TRUE 1 +# define FALSE 0 + +# define SUCCESS 1 +# define FAILURE 0 + +# define BOLD "\001\033[1m\002" +# define RED "\001\033[0;31m\002" +# define GREEN "\001\033[0;32m\002" +# define YELLOW "\001\033[0;33m\002" +# define BLUE "\001\033[0;34m\002" +# define MAGENTA "\001\033[0;35m\002" +# define CYAN "\001\033[0;36m\002" +# define RESET "\001\033[0m\002" +# define PROMPT RESET "🐚" GREEN "minishell" RESET ": " +# define PROMPT_LEN 51 + +void token_print(void *param); + +#endif diff --git a/inc/parser.h b/inc/parser.h index 8a8d05e..aafa02a 100644 --- a/inc/parser.h +++ b/inc/parser.h @@ -1,23 +1,23 @@ -/* ************************************************************************** */ -/* */ -/* :::::::: */ -/* parser.h :+: :+: */ -/* +:+ */ -/* By: qmennen +#+ */ -/* +#+ */ -/* Created: 2025/02/11 14:03:03 by qmennen #+# #+# */ -/* Updated: 2025/02/11 17:19:01 by whaffman ######## odam.nl */ -/* */ -/* ************************************************************************** */ - -#ifndef PARSER_H -# define PARSER_H - -# include "minishell.h" - -t_command *parser_command_new(char *cmd); -char **parser_get_arguments(t_list *list, t_minishell *minishell); -t_list *parser_get_commands(t_minishell *minishell); -t_list *parser_get_input_redirects(t_list *list); - -#endif +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* parser.h :+: :+: */ +/* +:+ */ +/* By: qmennen +#+ */ +/* +#+ */ +/* Created: 2025/02/11 14:03:03 by qmennen #+# #+# */ +/* Updated: 2025/02/11 17:19:01 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#ifndef PARSER_H +# define PARSER_H + +# include "minishell.h" + +t_command *parser_command_new(char *cmd); +char **parser_get_arguments(t_list *list, t_minishell *minishell); +t_list *parser_get_commands(t_minishell *minishell); +t_list *parser_get_input_redirects(t_list *list); + +#endif diff --git a/inc/utils.h b/inc/utils.h index 36087dc..cf269ea 100644 --- a/inc/utils.h +++ b/inc/utils.h @@ -1,29 +1,29 @@ -/* ************************************************************************** */ -/* */ -/* :::::::: */ -/* utils.h :+: :+: */ -/* +:+ */ -/* By: whaffman +#+ */ -/* +#+ */ -/* Created: 2025/02/05 16:06:35 by whaffman #+# #+# */ -/* Updated: 2025/02/20 18:07:19 by whaffman ######## odam.nl */ -/* */ -/* ************************************************************************** */ - -#ifndef UTILS_H -# define UTILS_H - -void free_minishell_line(t_minishell *minishell); -void free_minishell(t_minishell *minishell); -void free_command_list(void *content); -t_minishell *init_minishell(void); -void print_banner(void); -void print_list(void *content); -void simple_builtins(t_minishell *minishell); -void error_msg(char *func, char *msg); -void check_malloc(void *ptr); -char *ft_strdup_safe(const char *str); -char *ft_strjoin_safe(const char *s1, const char *s2); -void *ft_malloc_safe(size_t size); - -#endif // UTILS_H +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* utils.h :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/05 16:06:35 by whaffman #+# #+# */ +/* Updated: 2025/02/20 18:07:19 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#ifndef UTILS_H +# define UTILS_H + +void free_minishell_line(t_minishell *minishell); +void free_minishell(t_minishell *minishell); +void free_command_list(void *content); +t_minishell *init_minishell(void); +void print_banner(void); +void print_list(void *content); +void simple_builtins(t_minishell *minishell); +void error_msg(char *func, char *msg); +void check_malloc(void *ptr); +char *ft_strdup_safe(const char *str); +char *ft_strjoin_safe(const char *s1, const char *s2); +void *ft_malloc_safe(size_t size); + +#endif // UTILS_H diff --git a/src/debug/print_commands.c b/src/debug/print_commands.c index 7884a8d..cd5cc23 100644 --- a/src/debug/print_commands.c +++ b/src/debug/print_commands.c @@ -1,52 +1,52 @@ -/* ************************************************************************** */ -/* */ -/* :::::::: */ -/* print_commands.c :+: :+: */ -/* +:+ */ -/* By: marvin +#+ */ -/* +#+ */ -/* Created: 2025/02/18 20:06:37 by qmennen #+# #+# */ -/* Updated: 2025/02/23 12:43:35 by Quinten ######## odam.nl */ -/* */ -/* ************************************************************************** */ - -#include "minishell.h" - -void print_commands(void *param) -{ - t_command *command; - int i; - - command = (t_command *)param; - if (!command) - return ; - printf("command: %s\n", command->command); - printf("-- Args: "); - i = 0; - while (command->args[i++]) - printf("%s ", command->args[i]); - printf("\n"); - printf("-- Input redirects:\n"); - ft_lstiter(command->redirect_in, print_redirects); - printf("-- Output redirects:\n"); - ft_lstiter(command->redirect_out, print_redirects); -} - -void print_redirects(void *param) -{ - t_redirect *redirect; - - redirect = (t_redirect *)param; - if (!redirect) - return ; - printf(" Redirect %i value %s\n", redirect->type, redirect->value); -} - -void token_print(void *param) -{ - t_token *token; - - token = (t_token *)param; - printf("token type %i, value %s\n", token->type, token->value); -} - +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* print_commands.c :+: :+: */ +/* +:+ */ +/* By: marvin +#+ */ +/* +#+ */ +/* Created: 2025/02/18 20:06:37 by qmennen #+# #+# */ +/* Updated: 2025/02/23 12:43:35 by Quinten ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void print_commands(void *param) +{ + t_command *command; + int i; + + command = (t_command *)param; + if (!command) + return ; + printf("command: %s\n", command->command); + printf("-- Args: "); + i = 0; + while (command->args[i++]) + printf("%s ", command->args[i]); + printf("\n"); + printf("-- Input redirects:\n"); + ft_lstiter(command->redirect_in, print_redirects); + printf("-- Output redirects:\n"); + ft_lstiter(command->redirect_out, print_redirects); +} + +void print_redirects(void *param) +{ + t_redirect *redirect; + + redirect = (t_redirect *)param; + if (!redirect) + return ; + printf(" Redirect %i value %s\n", redirect->type, redirect->value); +} + +void token_print(void *param) +{ + t_token *token; + + token = (t_token *)param; + printf("token type %i, value %s\n", token->type, token->value); +} + diff --git a/src/main.c b/src/main.c index dec9a74..4b3e413 100644 --- a/src/main.c +++ b/src/main.c @@ -1,43 +1,43 @@ -/* ************************************************************************** */ -/* */ -/* :::::::: */ -/* main.c :+: :+: */ -/* +:+ */ -/* By: whaffman +#+ */ -/* +#+ */ -/* Created: 2025/02/04 16:19:22 by whaffman #+# #+# */ -/* Updated: 2025/02/19 17:59:24 by whaffman ######## odam.nl */ -/* */ -/* ************************************************************************** */ - -#include "libft.h" -#include "minishell.h" -#include "utils.h" - -int main(int argc, char **argv, char **envp) -{ - t_minishell *minishell; - - (void)argc; - (void)argv; - print_banner(); - history_load(); - minishell = init_minishell(); - signal_init_minishell(); - environment_parse(envp, &(minishell->environment)); - while (TRUE) - { - minishell->line = ft_prompt(minishell); - if (minishell->line == NULL) - break ; - minishell->lexer = ft_lexer_new(minishell->line); - minishell->tokens = ft_parse_input(minishell->lexer); - //ft_lstiter(minishell->tokens, token_print); - minishell->commands = parser_get_commands(minishell); - simple_builtins(minishell); - free_minishell_line(minishell); - } - ft_lstclear(&minishell->commands, free_command_list); - free_minishell(minishell); - return (EXIT_SUCCESS); -} +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* main.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/04 16:19:22 by whaffman #+# #+# */ +/* Updated: 2025/02/19 17:59:24 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" +#include "minishell.h" +#include "utils.h" + +int main(int argc, char **argv, char **envp) +{ + t_minishell *minishell; + + (void)argc; + (void)argv; + print_banner(); + history_load(); + minishell = init_minishell(); + signal_init_minishell(); + environment_parse(envp, &(minishell->environment)); + while (TRUE) + { + minishell->line = ft_prompt(minishell); + if (minishell->line == NULL) + break ; + minishell->lexer = ft_lexer_new(minishell->line); + minishell->tokens = ft_parse_input(minishell->lexer); + //ft_lstiter(minishell->tokens, token_print); + minishell->commands = parser_get_commands(minishell); + simple_builtins(minishell); + free_minishell_line(minishell); + } + ft_lstclear(&minishell->commands, free_command_list); + free_minishell(minishell); + return (EXIT_SUCCESS); +} diff --git a/src/utils/check_malloc.c b/src/utils/check_malloc.c index a7ae1d5..fff6fad 100644 --- a/src/utils/check_malloc.c +++ b/src/utils/check_malloc.c @@ -1,23 +1,23 @@ -/* ************************************************************************** */ -/* */ -/* :::::::: */ -/* check_malloc.c :+: :+: */ -/* +:+ */ -/* By: whaffman +#+ */ -/* +#+ */ -/* Created: 2025/02/20 18:00:10 by whaffman #+# #+# */ -/* Updated: 2025/02/20 18:01:08 by whaffman ######## odam.nl */ -/* */ -/* ************************************************************************** */ - -#include "minishell.h" - - -void check_malloc(void *ptr) -{ - if (ptr == NULL) - { - error_msg("malloc", "can't allocate memory"); - exit(1); - } -} +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* check_malloc.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 18:00:10 by whaffman #+# #+# */ +/* Updated: 2025/02/20 18:01:08 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + + +void check_malloc(void *ptr) +{ + if (ptr == NULL) + { + error_msg("malloc", "can't allocate memory"); + exit(1); + } +} diff --git a/src/utils/error_msg.c b/src/utils/error_msg.c index bb985e4..6442019 100644 --- a/src/utils/error_msg.c +++ b/src/utils/error_msg.c @@ -1,34 +1,34 @@ -/* ************************************************************************** */ -/* */ -/* :::::::: */ -/* error_msg.c :+: :+: */ -/* +:+ */ -/* By: whaffman +#+ */ -/* +#+ */ -/* Created: 2025/02/20 17:03:13 by whaffman #+# #+# */ -/* Updated: 2025/02/20 17:59:36 by whaffman ######## odam.nl */ -/* */ -/* ************************************************************************** */ - -#include "minishell.h" - - -void error_msg(char *func, char *msg) -{ - if (errno) - perror(RED BOLD "minishell" RESET); - else - { - ft_putstr_fd(RED BOLD "minishell" RESET ": ", 2); - if (func != NULL) - { - ft_putstr_fd(func, 2); - ft_putstr_fd(": ", 2); - } - if (msg != NULL) - ft_putstr_fd(msg, 2); - else - ft_putstr_fd("general error", 2); - ft_putstr_fd("\n", 2); - } -} +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* error_msg.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 17:03:13 by whaffman #+# #+# */ +/* Updated: 2025/02/20 17:59:36 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + + +void error_msg(char *func, char *msg) +{ + if (errno) + perror(RED BOLD "minishell" RESET); + else + { + ft_putstr_fd(RED BOLD "minishell" RESET ": ", 2); + if (func != NULL) + { + ft_putstr_fd(func, 2); + ft_putstr_fd(": ", 2); + } + if (msg != NULL) + ft_putstr_fd(msg, 2); + else + ft_putstr_fd("general error", 2); + ft_putstr_fd("\n", 2); + } +} diff --git a/src/utils/free_command_list.c b/src/utils/free_command_list.c index 4654515..5ed7a59 100644 --- a/src/utils/free_command_list.c +++ b/src/utils/free_command_list.c @@ -1,62 +1,62 @@ -/* ************************************************************************** */ -/* */ -/* :::::::: */ -/* free_command_list.c :+: :+: */ -/* +:+ */ -/* By: marvin +#+ */ -/* +#+ */ -/* Created: 2025/02/11 14:24:05 by qmennen #+# #+# */ -/* Updated: 2025/02/23 12:40:17 by Quinten ######## odam.nl */ -/* */ -/* ************************************************************************** */ - -#include "minishell.h" - -static void free_args(char **args) -{ - int i; - - i = 0; - while (args[i]) - { - free(args[i]); - i++; - } - free(args); -} - -static void free_redirects(t_list *lst) -{ - t_redirect *redir; - t_list *current; - t_list *last; - - current = lst; - while (current) - { - last = current; - redir = (t_redirect *)current->content; - if (redir && redir->value) - free(redir->value); - if (redir) - free(redir); - current = current->next; - free(last); - } -} - -void free_command_list(void *content) -{ - t_command *command; - - command = (t_command *)content; - if (command->command) - free(command->command); - if (command->args) - free_args(command->args); - if (command->redirect_in) - free_redirects(command->redirect_in); - if (command->redirect_out) - free_redirects(command->redirect_out); - free(command); -} +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* free_command_list.c :+: :+: */ +/* +:+ */ +/* By: marvin +#+ */ +/* +#+ */ +/* Created: 2025/02/11 14:24:05 by qmennen #+# #+# */ +/* Updated: 2025/02/23 12:40:17 by Quinten ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static void free_args(char **args) +{ + int i; + + i = 0; + while (args[i]) + { + free(args[i]); + i++; + } + free(args); +} + +static void free_redirects(t_list *lst) +{ + t_redirect *redir; + t_list *current; + t_list *last; + + current = lst; + while (current) + { + last = current; + redir = (t_redirect *)current->content; + if (redir && redir->value) + free(redir->value); + if (redir) + free(redir); + current = current->next; + free(last); + } +} + +void free_command_list(void *content) +{ + t_command *command; + + command = (t_command *)content; + if (command->command) + free(command->command); + if (command->args) + free_args(command->args); + if (command->redirect_in) + free_redirects(command->redirect_in); + if (command->redirect_out) + free_redirects(command->redirect_out); + free(command); +} diff --git a/src/utils/ft_malloc_safe.c b/src/utils/ft_malloc_safe.c index eeb6923..5c601f2 100644 --- a/src/utils/ft_malloc_safe.c +++ b/src/utils/ft_malloc_safe.c @@ -1,22 +1,22 @@ -/* ************************************************************************** */ -/* */ -/* :::::::: */ -/* ft_malloc_safe.c :+: :+: */ -/* +:+ */ -/* By: whaffman +#+ */ -/* +#+ */ -/* Created: 2025/02/20 18:06:46 by whaffman #+# #+# */ -/* Updated: 2025/02/20 18:07:00 by whaffman ######## odam.nl */ -/* */ -/* ************************************************************************** */ - -#include "minishell.h" - -void *ft_malloc_safe(size_t size) -{ - void *ptr; - - ptr = malloc(size); - check_malloc(ptr); - return (ptr); -} +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_malloc_safe.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 18:06:46 by whaffman #+# #+# */ +/* Updated: 2025/02/20 18:07:00 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void *ft_malloc_safe(size_t size) +{ + void *ptr; + + ptr = malloc(size); + check_malloc(ptr); + return (ptr); +} diff --git a/src/utils/ft_strdup_safe.c b/src/utils/ft_strdup_safe.c index c0fe7fb..bb52b05 100644 --- a/src/utils/ft_strdup_safe.c +++ b/src/utils/ft_strdup_safe.c @@ -1,22 +1,22 @@ -/* ************************************************************************** */ -/* */ -/* :::::::: */ -/* ft_strdup_safe.c :+: :+: */ -/* +:+ */ -/* By: whaffman +#+ */ -/* +#+ */ -/* Created: 2025/02/20 18:01:27 by whaffman #+# #+# */ -/* Updated: 2025/02/20 18:04:53 by whaffman ######## odam.nl */ -/* */ -/* ************************************************************************** */ - -#include "minishell.h" - -char *ft_strdup_safe(const char *str) -{ - char *new_str; - - new_str = ft_strdup(str); - check_malloc(new_str); - return (new_str); -} +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strdup_safe.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 18:01:27 by whaffman #+# #+# */ +/* Updated: 2025/02/20 18:04:53 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +char *ft_strdup_safe(const char *str) +{ + char *new_str; + + new_str = ft_strdup(str); + check_malloc(new_str); + return (new_str); +} diff --git a/src/utils/ft_strjoin_safe.c b/src/utils/ft_strjoin_safe.c index 27c8d0f..8a41829 100644 --- a/src/utils/ft_strjoin_safe.c +++ b/src/utils/ft_strjoin_safe.c @@ -1,23 +1,23 @@ -/* ************************************************************************** */ -/* */ -/* :::::::: */ -/* ft_strjoin_safe.c :+: :+: */ -/* +:+ */ -/* By: whaffman +#+ */ -/* +#+ */ -/* Created: 2025/02/20 18:02:31 by whaffman #+# #+# */ -/* Updated: 2025/02/20 18:04:23 by whaffman ######## odam.nl */ -/* */ -/* ************************************************************************** */ - -#include "minishell.h" - -char *ft_strjoin_safe(const char *s1, const char *s2) -{ - char *new_str; - - new_str = ft_strjoin(s1, s2); - check_malloc(new_str); - return (new_str); -} - +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strjoin_safe.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 18:02:31 by whaffman #+# #+# */ +/* Updated: 2025/02/20 18:04:23 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +char *ft_strjoin_safe(const char *s1, const char *s2) +{ + char *new_str; + + new_str = ft_strjoin(s1, s2); + check_malloc(new_str); + return (new_str); +} +