From 7b5b5338a4e1758c2359f08e29035c9b4fa90d4a Mon Sep 17 00:00:00 2001 From: tomoron Date: Sat, 17 Feb 2024 04:37:01 +0100 Subject: [PATCH] alias parsing --- Makefile | 6 +++-- srcs/alias.c | 9 ++++--- srcs/exec.c | 12 +++++----- srcs/exit.c | 5 ++-- srcs/handle_alias.c | 32 +++++++++++++++++++++++++ srcs/lst_alias.c | 57 +++++++++++++++++++++++++++++++++++++++++++++ srcs/lst_env.c | 2 +- srcs/main.c | 12 ++++++---- srcs/minishell.h | 12 ++++++---- srcs/minishellrc.c | 6 ++--- srcs/parsing.c | 5 ++-- 11 files changed, 129 insertions(+), 29 deletions(-) create mode 100644 srcs/handle_alias.c create mode 100755 srcs/lst_alias.c diff --git a/Makefile b/Makefile index 145df7e..d9f7ecf 100644 --- a/Makefile +++ b/Makefile @@ -6,11 +6,11 @@ # By: marde-vr +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/07/28 00:35:01 by tomoron #+# #+# # -# Updated: 2024/02/17 02:24:43 by marde-vr ### ########.fr # +# Updated: 2024/02/17 04:34:37 by tomoron ### ########.fr # # # # **************************************************************************** # -CC = clang +CC = cc SRCS_RAW = main.c\ lst_cmd.c\ cd.c\ @@ -24,6 +24,8 @@ SRCS_RAW = main.c\ debug.c\ env_to_char_tab.c\ parsing_var.c\ + handle_alias.c\ + lst_alias.c\ minishellrc.c OBJS_DIR = objs/ diff --git a/srcs/alias.c b/srcs/alias.c index 2b7ebe2..1012d8d 100644 --- a/srcs/alias.c +++ b/srcs/alias.c @@ -6,13 +6,16 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/16 23:16:07 by marde-vr #+# #+# */ -/* Updated: 2024/02/17 02:23:21 by marde-vr ### ########.fr */ +/* Updated: 2024/02/17 04:22:39 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -void alias(t_cmd *args) +int alias(t_cmd *args, t_alias *aliases) { - + (void)args; + (void)aliases; + return(0); + //GLHF marijn } diff --git a/srcs/exec.c b/srcs/exec.c index b75b58c..d9d7c28 100755 --- a/srcs/exec.c +++ b/srcs/exec.c @@ -6,13 +6,13 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/07 14:12:49 by tomoron #+# #+# */ -/* Updated: 2024/02/17 02:21:53 by marde-vr ### ########.fr */ +/* Updated: 2024/02/17 04:18:31 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -int exec_builtin(t_cmd *parsed_cmd, t_env *env) +int exec_builtin(t_cmd *parsed_cmd, t_env *env, t_alias *aliases) { if (!ft_strcmp(parsed_cmd->token, "echo")) @@ -22,13 +22,13 @@ int exec_builtin(t_cmd *parsed_cmd, t_env *env) else if (!ft_strcmp(parsed_cmd->token, "env")) g_return_code = print_env(env); else if (!ft_strcmp(parsed_cmd->token, "exit")) - exit_bt(parsed_cmd, env); + exit_bt(parsed_cmd, env, aliases); else if (!ft_strcmp(parsed_cmd->token, "pwd")) g_return_code = pwd(); else if (!ft_strcmp(parsed_cmd->token, "cd")) g_return_code = cd(parsed_cmd); else if (!ft_strcmp(parsed_cmd->token, "alias")) - g_return_code = alias(parsed_cmd); + g_return_code = alias(parsed_cmd, aliases); else return (STDIN_FILENO); return (STDOUT_FILENO); @@ -134,14 +134,14 @@ void get_cmd_path(t_cmd *cmd, t_env *env) } } -void exec_command(t_cmd *parsed_cmd, t_env *env) +void exec_command(t_cmd *parsed_cmd, t_env *env, t_alias *aliases) { t_cmd *cur_cmd; int args_count; char **cmd_args; int i; - if (!parsed_cmd || exec_builtin(parsed_cmd, env)) + if (!parsed_cmd || exec_builtin(parsed_cmd, env, aliases)) return ; cur_cmd = parsed_cmd; args_count = get_args_count(parsed_cmd); diff --git a/srcs/exit.c b/srcs/exit.c index 073f7a2..11bd5d8 100755 --- a/srcs/exit.c +++ b/srcs/exit.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/07 16:04:11 by tomoron #+# #+# */ -/* Updated: 2024/02/16 13:07:01 by marde-vr ### ########.fr */ +/* Updated: 2024/02/17 04:11:51 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,7 +19,7 @@ void print_numeric_arg_err(char *arg) ft_putstr_fd(": numeric argument required\n", 2); } -void exit_bt(t_cmd *args, t_env *env) +void exit_bt(t_cmd *args, t_env *env, t_alias *aliases) { t_cmd *start; int exit_code; @@ -41,6 +41,7 @@ void exit_bt(t_cmd *args, t_env *env) else exit_code = g_return_code; free_cmd(start); + free_alias(aliases); free_env(env); exit(exit_code); } diff --git a/srcs/handle_alias.c b/srcs/handle_alias.c new file mode 100644 index 0000000..c4e5ceb --- /dev/null +++ b/srcs/handle_alias.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* handle_alias.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tomoron +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/02/17 02:54:36 by tomoron #+# #+# */ +/* Updated: 2024/02/17 04:26:57 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +t_cmd *handle_alias(t_cmd *cmd, t_env *env, t_alias *alias) +{ + t_cmd *res; + t_cmd *tmp; + char *alias_command; + + alias_command = 0; + if(cmd && cmd->type == ARG) + alias_command = ft_get_alias(alias,cmd->token); + if(!alias_command) + return(cmd); + res = parse_command(alias_command, env); + tmp = res; + while(tmp->next) + tmp = tmp->next; + tmp->next = cmd; + return(res); +} diff --git a/srcs/lst_alias.c b/srcs/lst_alias.c new file mode 100755 index 0000000..c8dc78f --- /dev/null +++ b/srcs/lst_alias.c @@ -0,0 +1,57 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lst_alias.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: marde-vr +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/02/06 20:46:19 by tomoron #+# #+# */ +/* Updated: 2024/02/17 04:34:24 by tomoron ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +t_alias *alias_add_back(t_alias *alias, char *name, char *value) +{ + t_alias *res; + t_alias *current; + + res = ft_calloc(1, sizeof(t_alias)); + if (!res) + return (alias); + res->name = name; + res->value = value; + if (!alias) + return (res); + current = alias; + while (current->next) + current = current->next; + current->next = res; + return (alias); +} + +void free_alias(t_alias *alias) +{ + if (alias && alias->next) + free_alias(alias->next); + if (alias) + { + free(alias->name); + free(alias->value); + } + free(alias); +} + +char *ft_get_alias(t_alias *alias, char *name) +{ + while (alias) + { + if (!ft_strcmp(alias->name, name)) + return (alias->value); + alias = alias->next; + } + return (0); +} + + diff --git a/srcs/lst_env.c b/srcs/lst_env.c index e1e3ba9..a1e2ce3 100755 --- a/srcs/lst_env.c +++ b/srcs/lst_env.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/06 20:46:19 by tomoron #+# #+# */ -/* Updated: 2024/02/13 16:21:41 by marde-vr ### ########.fr */ +/* Updated: 2024/02/17 04:33:17 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/srcs/main.c b/srcs/main.c index 4f08020..b784e8f 100755 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/02 21:59:20 by tomoron #+# #+# */ -/* Updated: 2024/02/16 21:57:11 by tomoron ### ########.fr */ +/* Updated: 2024/02/17 04:30:26 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -65,14 +65,16 @@ int main(int argc, char **argv, char **envp) char *command; t_cmd *parsed_cmd; t_env *env; + t_alias *aliases; char *prompt; - command = (char *)STDOUT_FILENO; + command = (char *)1; (void)argc; (void)argv; env = get_env(envp); + aliases = 0; if (env) - handle_minishellrc(env); + handle_minishellrc(env, aliases); while (env && command) { prompt = get_prompt(); @@ -82,12 +84,14 @@ int main(int argc, char **argv, char **envp) free(prompt); add_history(command); parsed_cmd = parse_command(command, env); + parsed_cmd = handle_alias(parsed_cmd, env, aliases); free(command); //print_parsed_cmd(parsed_cmd);//debug - exec_command(parsed_cmd, env); + exec_command(parsed_cmd, env, aliases); free_cmd(parsed_cmd); } rl_clear_history(); free_env(env); + free_alias(aliases); return (g_return_code); } diff --git a/srcs/minishell.h b/srcs/minishell.h index b908fc5..613b880 100755 --- a/srcs/minishell.h +++ b/srcs/minishell.h @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/04 17:31:38 by tomoron #+# #+# */ -/* Updated: 2024/02/17 02:29:12 by marde-vr ### ########.fr */ +/* Updated: 2024/02/17 04:30:53 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -56,9 +56,9 @@ extern int g_return_code; t_cmd *cmd_add_back(t_cmd *res, char *token, t_token_type type); void free_cmd(t_cmd *cmd); -void exec_command(t_cmd *cmd, t_env *env); +void exec_command(t_cmd *cmd, t_env *env, t_alias *alias); int echo(t_cmd *args); -void exit_bt(t_cmd *args, t_env *env); +void exit_bt(t_cmd *args, t_env *env, t_alias *aliases); t_env *env_add_back(t_env *env, char *name, char *value); void free_env(t_env *env); int print_env(t_env *env); @@ -72,9 +72,11 @@ int is_cmd_char(char c); void print_parsed_cmd(t_cmd *cmd);//debug void ft_exit(t_cmd *cmd, t_env *env, int error_code); char **env_to_char_tab(t_env *env); -void handle_minishellrc(t_env *env); +void handle_minishellrc(t_env *env, t_alias *aliases); t_cmd *handle_alias(t_cmd *cmd, t_env *env, t_alias *alias); int cd(t_cmd *args); -int alias(t_cmd *args); +int alias(t_cmd *args, t_alias *aliases); +void free_alias(t_alias *alias); +char *ft_get_alias(t_alias *alias, char *var_name); #endif diff --git a/srcs/minishellrc.c b/srcs/minishellrc.c index ed87a00..867a224 100644 --- a/srcs/minishellrc.c +++ b/srcs/minishellrc.c @@ -6,13 +6,13 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/16 17:40:16 by marde-vr #+# #+# */ -/* Updated: 2024/02/16 18:25:56 by marde-vr ### ########.fr */ +/* Updated: 2024/02/17 04:30:14 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -void handle_minishellrc(t_env *env) +void handle_minishellrc(t_env *env, t_alias *aliases) { char *home; char *rc_path; @@ -35,7 +35,7 @@ void handle_minishellrc(t_env *env) while (line) { parsed_cmd = parse_command(line, env); - exec_command(parsed_cmd, env); + exec_command(parsed_cmd, env, aliases); free(parsed_cmd); free(line); line = get_next_line(fd); diff --git a/srcs/parsing.c b/srcs/parsing.c index 1882f91..f180715 100755 --- a/srcs/parsing.c +++ b/srcs/parsing.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/09 15:26:01 by tomoron #+# #+# */ -/* Updated: 2024/02/17 00:29:12 by tomoron ### ########.fr */ +/* Updated: 2024/02/17 04:25:54 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" @@ -86,7 +86,7 @@ t_token_type get_token_type(char **command) return (res); } -t_cmd *parse_command(char *command, t_env *env, t_alis *aliases) +t_cmd *parse_command(char *command, t_env *env) { int in_quote; int in_dquote; @@ -114,6 +114,5 @@ t_cmd *parse_command(char *command, t_env *env, t_alis *aliases) ft_putstr_fd("minishell: syntax error\n", 2); return (0); } - parsed_cmd = handle_alias(parsed_cmd, env, aliases); return (res); }