diff --git a/.vscode/launch.json b/.vscode/launch.json index d319ec0..21672c5 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,7 +5,7 @@ "name": "Debug minishell", "type": "cppdbg", "request": "launch", - "program": "${workspaceFolder}/minishell", + "program": "${workspaceFolder}/build/debug/minishell", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", diff --git a/sources.mk b/sources.mk index 1726b8e..e2269f4 100644 --- a/sources.mk +++ b/sources.mk @@ -1,22 +1,22 @@ VPATH = src:src/prompt:src/utils:src/lexer:src/token:src/environment:src/executor:src/parser:src/signal:src/debug:src/expander:src/builtin:src/redirect: -SOURCES = history_load.c history_write.c prompt.c free_lexer.c free_token.c \ -free_token_list.c free_minishell.c free_minishell_line.c \ -init_minishell.c check_malloc.c error_msg.c free_command_list.c \ -ft_strdup_safe.c ft_strjoin_safe.c print_banner.c free_freelist.c \ -malloc_safe.c free_safe.c ft_lstclear_safe.c ft_lstnew_safe.c \ -lexer_read_char.c lexer_token_next.c lexer_parse_input.c lexer_new.c \ -lexer_read_word.c token_new.c token_parse.c environment_free.c \ -environment_del.c environment_free_list.c environment_get.c \ -environment_parse.c environment_add.c environment_get_arr.c \ -environment_print.c executor_close_fds.c executor_child.c \ -executor_fork.c executor_absolute_path.c executor_execute_pipeline.c \ -executor_count_fds.c executor_create_redirects.c executor_open_fds.c \ -executor_create_pipes.c parser_get_arguments.c parser_new_command.c \ -parser_get_commands.c signal.c print_commands.c print_freelist.c \ -expander_expand_dollar.c expander_get_variable.c \ -expander_is_character.c expander_parse_variables.c \ -expander_parse_string.c expander_allocate_memory.c builtin_cd.c \ -builtin_echo.c builtin_env.c builtin_export.c builtin_pwd.c \ -builtin_router.c builtin_unset.c simple_builtins.c builtin_exit.c \ -is_builtin.c main.c redirect_get_inputs.c redirect_get_outputs.c \ -redirect_new.c redirect_valid_type.c \ +SOURCES = history_load.c history_write.c prompt.c ft_lstclear_safe.c \ +ft_lstnew_safe.c ft_strdup_safe.c ft_strjoin_safe.c init_minishell.c \ +malloc_safe.c print_banner.c error_msg.c check_malloc.c \ +free_command_list.c free_freelist.c free_lexer.c free_minishell.c \ +free_minishell_line.c free_safe.c free_token.c free_token_list.c \ +lexer_read_char.c lexer_new.c lexer_parse_input.c lexer_read_word.c \ +lexer_token_next.c token_new.c token_parse.c environment_add.c \ +environment_del.c environment_free.c environment_free_list.c \ +environment_get.c environment_get_arr.c environment_parse.c \ +environment_print.c executor_close_fds.c executor_absolute_path.c \ +executor_child.c executor_count_fds.c executor_create_pipes.c \ +executor_create_redirects.c executor_execute_pipeline.c \ +executor_fork.c executor_open_fds.c parser_get_arguments.c \ +parser_get_commands.c parser_new_command.c signal.c print_commands.c \ +print_freelist.c expander_expand_dollar.c expander_is_character.c \ +expander_allocate_memory.c expander_get_variable.c \ +expander_parse_string.c expander_parse_variables.c builtin_echo.c \ +builtin_router.c simple_builtins.c is_builtin.c builtin_cd.c \ +builtin_env.c builtin_exit.c builtin_export.c builtin_pwd.c \ +builtin_unset.c redirect_valid_type.c redirect_get_inputs.c \ +redirect_get_outputs.c redirect_new.c main.c \ diff --git a/src/debug/print_commands.c b/src/debug/print_commands.c index cd5cc23..e52ca8f 100644 --- a/src/debug/print_commands.c +++ b/src/debug/print_commands.c @@ -23,12 +23,12 @@ void print_commands(void *param) printf("command: %s\n", command->command); printf("-- Args: "); i = 0; - while (command->args[i++]) - printf("%s ", command->args[i]); + 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"); + printf("-- Output redirects:\n"); ft_lstiter(command->redirect_out, print_redirects); } diff --git a/src/expander/expander_allocate_memory.c b/src/expander/expander_allocate_memory.c index 85689dc..08c72b8 100644 --- a/src/expander/expander_allocate_memory.c +++ b/src/expander/expander_allocate_memory.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ */ /* +#+ */ /* Created: 2025/02/19 13:57:19 by qmennen #+# #+# */ -/* Updated: 2025/02/25 14:31:33 by whaffman ######## odam.nl */ +/* Updated: 2025/02/25 17:54:08 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -22,7 +22,7 @@ char *expander_allocate_memory( t_environment *env; char *string; - size = 0; + size = 1; current = variables; while (current) { @@ -37,7 +37,5 @@ char *expander_allocate_memory( } size += ft_strlen(s); string = malloc_safe(minishell, size); - if (!string) - perror("expander malloc"); return (string); } diff --git a/src/utils/free_minishell_line.c b/src/utils/free_minishell_line.c index 3c6f3bb..693b953 100644 --- a/src/utils/free_minishell_line.c +++ b/src/utils/free_minishell_line.c @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/02/05 16:01:44 by whaffman #+# #+# */ -/* Updated: 2025/02/25 16:48:39 by whaffman ######## odam.nl */ +/* Updated: 2025/02/25 17:40:32 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -15,7 +15,7 @@ void free_minishell_line(t_minishell *minishell) { if (minishell->line) - free_safe(minishell, (void **)&(minishell->line)); + free(minishell->line); if (minishell->lexer) ft_lexer_free(minishell, minishell->lexer); if (minishell->tokens) diff --git a/src/utils/free_safe.c b/src/utils/free_safe.c index ccbd0ee..e5070ec 100644 --- a/src/utils/free_safe.c +++ b/src/utils/free_safe.c @@ -6,12 +6,37 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/02/25 15:09:34 by whaffman #+# #+# */ -/* Updated: 2025/02/25 16:00:29 by whaffman ######## odam.nl */ +/* Updated: 2025/02/25 17:35:39 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #include "minishell.h" +#include +#include +#include + +/* Obtain a backtrace and print it to stdout. */ +void +print_trace (void) +{ + void *array[10]; + char **strings; + int size, i; + + size = backtrace (array, 10); + strings = backtrace_symbols (array, size); + if (strings != NULL) + { + + printf ("Obtained %d stack frames.\n", size); + for (i = 0; i < size; i++) + fprintf (stderr, "%s\n", strings[i]); + } + + free (strings); +} + void free_safe(t_minishell *minishell, void **ptr) { t_list *prev; @@ -37,6 +62,7 @@ void free_safe(t_minishell *minishell, void **ptr) current = current->next; } error_msg("free_safe", "pointer not found in freelist"); + // print_trace(); } *ptr = NULL; } diff --git a/src/utils/print_banner.c b/src/utils/print_banner.c index 1cdc64d..ba33208 100644 --- a/src/utils/print_banner.c +++ b/src/utils/print_banner.c @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/02/05 16:04:44 by whaffman #+# #+# */ -/* Updated: 2025/02/23 12:31:28 by willem ######## odam.nl */ +/* Updated: 2025/02/25 17:27:28 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -15,7 +15,8 @@ void print_banner(void) { printf("%s\n", - "\033[2J\033[1;1H" GREEN + // "\033[2J\033[1;1H" GREEN + GREEN " • • ┓ ┓┓\n" " ┏┳┓┓┏┓┓┏┣┓┏┓┃┃\n" " ┛┗┗┗┛┗┗┛┛┗┗ ┗┗\n"