diff --git a/Makefile b/Makefile index 5e2c101..634f3cc 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: qmennen +#+ # # +#+ # # Created: 2024/10/15 11:48:46 by whaffman #+# #+# # -# Updated: 2025/02/19 17:43:13 by whaffman ######## odam.nl # +# Updated: 2025/02/20 11:10:42 by whaffman ######## odam.nl # # # # **************************************************************************** # @@ -22,7 +22,8 @@ LIBFT = $(LIBFT_PATH)/libft.a OBJ_PATH = obj -VPATH = src:src/environment:src/prompt:src/lexer:src/token:src/utils:src/executor:src/parser:src/expander:src/debug:src/signal +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 SOURCES = $(shell basename -a $(shell find $(SRC_PATH) -type f -name "*.c")) OBJECTS = $(addprefix $(OBJ_PATH)/, $(SOURCES:.c=.o)) diff --git a/inc/builtin.h b/inc/builtin.h new file mode 100644 index 0000000..b9c8182 --- /dev/null +++ b/inc/builtin.h @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* builtin.h :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 11:09:02 by whaffman #+# #+# */ +/* Updated: 2025/02/20 11:38:58 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#ifndef BUILTIN_H +# define BUILTIN_H +# include "minishell.h" + +int is_builtin(char *cmd); +int builtin_router(t_minishell *minishell, t_command *cmd); +int builtin_echo(t_minishell *minishell, t_command *cmd); +int builtin_cd(t_minishell *minishell, t_command *cmd); +int builtin_pwd(t_minishell *minishell, t_command *cmd); +int builtin_export(t_minishell *minishell, t_command *cmd); +int builtin_unset(t_minishell *minishell, t_command *cmd); +int builtin_env(t_minishell *minishell, t_command *cmd); +int builtin_exit(t_minishell *minishell, t_command *cmd); + +#endif // BUILTIN_H diff --git a/inc/minishell.h b/inc/minishell.h index bf6d561..27bca6a 100644 --- a/inc/minishell.h +++ b/inc/minishell.h @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/02/04 16:13:13 by whaffman #+# #+# */ -/* Updated: 2025/02/19 14:46:53 by whaffman ######## odam.nl */ +/* Updated: 2025/02/20 11:35:24 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -20,6 +20,7 @@ # include "environment.h" # include "prompt.h" # include "tokenizer.h" +# include "builtin.h" # include "executor.h" # include "parser.h" # include "expander.h" diff --git a/inc/typedef.h b/inc/typedef.h index c3b4b8a..a09131e 100644 --- a/inc/typedef.h +++ b/inc/typedef.h @@ -6,13 +6,15 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/02/05 12:36:08 by whaffman #+# #+# */ -/* Updated: 2025/02/18 14:34:39 by whaffman ######## odam.nl */ +/* Updated: 2025/02/20 11:37:00 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #ifndef TYPEDEF_H # define TYPEDEF_H + + typedef enum e_token_type { T_WORD, @@ -69,4 +71,6 @@ typedef struct s_minishell t_list *tokens; t_list *commands; } t_minishell; + +typedef int (*t_builtin_fn)(t_minishell *, t_command *); #endif // TYPEDEF_H diff --git a/src/builtin/builtin_cd.c b/src/builtin/builtin_cd.c new file mode 100644 index 0000000..118948e --- /dev/null +++ b/src/builtin/builtin_cd.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* builtin_cd.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 11:33:07 by whaffman #+# #+# */ +/* Updated: 2025/02/20 11:38:03 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int builtin_cd(t_minishell *minishell, t_command *cmd) +{ + (void)minishell; + (void)cmd; + return (SUCCESS); +} diff --git a/src/builtin/builtin_echo.c b/src/builtin/builtin_echo.c new file mode 100644 index 0000000..a800250 --- /dev/null +++ b/src/builtin/builtin_echo.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* builtin_echo.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 11:33:05 by whaffman #+# #+# */ +/* Updated: 2025/02/20 11:38:10 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int builtin_echo(t_minishell *minishell, t_command *cmd) +{ + (void)minishell; + (void)cmd; + return (SUCCESS); +} diff --git a/src/builtin/builtin_env.c b/src/builtin/builtin_env.c new file mode 100644 index 0000000..76ed25f --- /dev/null +++ b/src/builtin/builtin_env.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* builtin_env.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 11:33:02 by whaffman #+# #+# */ +/* Updated: 2025/02/20 11:38:17 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int builtin_env(t_minishell *minishell, t_command *cmd) +{ + (void)minishell; + (void)cmd; + return (SUCCESS); +} diff --git a/src/builtin/builtin_exit.c b/src/builtin/builtin_exit.c new file mode 100644 index 0000000..3e9086f --- /dev/null +++ b/src/builtin/builtin_exit.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* builtin_exit.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 11:32:59 by whaffman #+# #+# */ +/* Updated: 2025/02/20 11:38:25 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int builtin_exit(t_minishell *minishell, t_command *cmd) +{ + (void)minishell; + (void)cmd; + return (SUCCESS); +} diff --git a/src/builtin/builtin_export.c b/src/builtin/builtin_export.c new file mode 100644 index 0000000..99a8236 --- /dev/null +++ b/src/builtin/builtin_export.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* builtin_export.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 11:32:53 by whaffman #+# #+# */ +/* Updated: 2025/02/20 11:38:32 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int builtin_export(t_minishell *minishell, t_command *cmd) +{ + (void)minishell; + (void)cmd; + return (SUCCESS); +} diff --git a/src/builtin/builtin_pwd.c b/src/builtin/builtin_pwd.c new file mode 100644 index 0000000..c47db48 --- /dev/null +++ b/src/builtin/builtin_pwd.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* builtin_pwd.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 11:32:28 by whaffman #+# #+# */ +/* Updated: 2025/02/20 11:38:37 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int builtin_pwd(t_minishell *minishell, t_command *cmd) +{ + (void)minishell; + (void)cmd; + return (SUCCESS); +} diff --git a/src/builtin/builtin_router.c b/src/builtin/builtin_router.c new file mode 100644 index 0000000..584fb2f --- /dev/null +++ b/src/builtin/builtin_router.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* builtin_router.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 11:12:38 by whaffman #+# #+# */ +/* Updated: 2025/02/20 11:41:28 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int builtin_router(t_minishell *minishell, t_command *cmd) +{ + const t_builtin_fn builtin_fn[] = { + builtin_echo, + builtin_cd, + builtin_pwd, + builtin_export, + builtin_unset, + builtin_env, + builtin_exit}; + + if (!is_builtin(cmd->args[0])) + return (FALSE); + builtin_fn[is_builtin(cmd->args[0])](minishell, cmd); + return (TRUE); +} diff --git a/src/builtin/builtin_unset.c b/src/builtin/builtin_unset.c new file mode 100644 index 0000000..834fad5 --- /dev/null +++ b/src/builtin/builtin_unset.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* builtin_unset.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 11:25:43 by whaffman #+# #+# */ +/* Updated: 2025/02/20 11:31:25 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int builtin_unset(t_minishell *minishell, t_command *cmd) +{ + int i; + + i = 1; + while (cmd->args[i] != NULL) + { + if (environment_get(minishell->environment, cmd->args[i]) != NULL) + environment_del(&(minishell->environment), cmd->args[i]); + i++; + } + return (SUCCESS); +} diff --git a/src/builtin/is_builtin.c b/src/builtin/is_builtin.c new file mode 100644 index 0000000..a9eca66 --- /dev/null +++ b/src/builtin/is_builtin.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* is_builtin.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/02/20 11:03:33 by whaffman #+# #+# */ +/* Updated: 2025/02/20 11:12:25 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int is_builtin(char *cmd) +{ + const char *builtins[] = {"echo", "cd", "pwd", "export", + "unset", "env", "exit", NULL}; + int i; + + i = 0; + while (builtins[i]) + { + if (ft_strcmp(cmd, builtins[i]) == 0) + return (1); + i++; + } + return (FALSE); +} diff --git a/src/utils/simple_builtins.c b/src/builtin/simple_builtins.c similarity index 94% rename from src/utils/simple_builtins.c rename to src/builtin/simple_builtins.c index 922f38a..71988f2 100644 --- a/src/utils/simple_builtins.c +++ b/src/builtin/simple_builtins.c @@ -6,13 +6,13 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/02/05 16:21:39 by whaffman #+# #+# */ -/* Updated: 2025/02/18 15:49:36 by whaffman ######## odam.nl */ +/* Updated: 2025/02/20 11:42:29 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #include "minishell.h" -void builtin_export(t_minishell *minishell) +void builtin_export_simple(t_minishell *minishell) { t_list *tmp; t_environment *env; @@ -93,7 +93,7 @@ void simple_builtins(t_minishell *minishell) exit(EXIT_SUCCESS); } else if (cmp_value(minishell->tokens, "export")) - builtin_export(minishell); + builtin_export_simple(minishell); else if (cmp_value(minishell->tokens, "unset")) { environment_del(&(minishell->environment), diff --git a/src/lexer/lexer_token_next.c b/src/lexer/lexer_token_next.c index 0aab9db..d419c8c 100644 --- a/src/lexer/lexer_token_next.c +++ b/src/lexer/lexer_token_next.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* ::: :::::::: */ -/* lexer_token_next.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: qmennen +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/02/04 16:07:58 by qmennen #+# #+# */ -/* Updated: 2025/02/18 17:02:17 by qmennen ### ########.fr */ +/* :::::::: */ +/* lexer_token_next.c :+: :+: */ +/* +:+ */ +/* By: qmennen +#+ */ +/* +#+ */ +/* Created: 2025/02/04 16:07:58 by qmennen #+# #+# */ +/* Updated: 2025/02/20 10:39:50 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -68,6 +68,9 @@ t_token *ft_token_next(t_lexer *lexer) free(word); } else + { token = token_new(T_ERROR, NULL, current_pos); + printf("token->type: %d\n", token->type); + } return (token); }