From 2eb59ee61e49b60472f82c000dd4f3536bd1987c Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 1 Apr 2020 15:55:57 +0200 Subject: Added builtin support in command eval, Refactoring eval/builtin function, Added doc --- src/builtin/builtin.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/builtin/builtin.c (limited to 'src/builtin/builtin.c') diff --git a/src/builtin/builtin.c b/src/builtin/builtin.c new file mode 100644 index 0000000..4889f9c --- /dev/null +++ b/src/builtin/builtin.c @@ -0,0 +1,61 @@ +/** +** \file builtin.c +** \brief Builtin functions +*/ + +#include "minishell.h" + +/** +** \brief Array storing builtin executable name and associated functions +*/ + +static struct s_builtin_entry g_builtin_lookup[] = { + {"echo", builtin_echo}, + {"cd", builtin_cd}, + {"pwd", builtin_pwd}, + {"export", builtin_export}, + {"unset", builtin_unset}, + {"env", builtin_env}, + {"exit", builtin_exit}, +}; + +/** +** \brief Call builtin function associated with command name +** \param argv Arguments to the builtin 'main', with argv[0] being the executable name +** \param env Environment Vector +** \return Builtin main return status +*/ + +int builtin_dispatch_run(char **argv, t_env env) +{ + size_t i; + + i = 0; + while (i < sizeof(g_builtin_lookup) / sizeof(struct s_builtin_entry)) + { + if (ft_strcmp(g_builtin_lookup[i].name, argv[0]) == 0) + return (g_builtin_lookup[i].func(argv, env)); + i++; + } + return (BUILTIN_NOT_FOUND); +} + +/** +** \brief Check if executable name is a builtin +** \param exec_name Executable name +** \return True if executable name is a builtin +*/ + +bool builtin_check_exec_name(char *exec_name) +{ + size_t i; + + i = 0; + while (i < sizeof(g_builtin_lookup) / sizeof(struct s_builtin_entry)) + { + if (ft_strcmp(g_builtin_lookup[i].name, exec_name) == 0) + return (true); + i++; + } + return (false); +} -- cgit