From ff1f6351aae9be11b4e5f499c0e6a980c698ee96 Mon Sep 17 00:00:00 2001 From: mdev9 Date: Sun, 18 Feb 2024 19:06:16 +0100 Subject: [PATCH] working on aliases --- Makefile | 5 +++-- srcs/alias.c | 55 +++++++++++++++++++++++++++++++++++++++------- srcs/exec.c | 7 ++++-- srcs/export.c | 20 +++++++++++++++++ srcs/minishell.h | 4 +++- srcs/minishellrc.c | 11 ++++++---- 6 files changed, 85 insertions(+), 17 deletions(-) create mode 100644 srcs/export.c diff --git a/Makefile b/Makefile index 9ffb289..29113f7 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: marde-vr +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/07/28 00:35:01 by tomoron #+# #+# # -# Updated: 2024/02/18 15:45:58 by tomoron ### ########.fr # +# Updated: 2024/02/18 18:33:00 by marde-vr ### ########.fr # # # # **************************************************************************** # @@ -26,7 +26,8 @@ SRCS_RAW = main.c\ parsing_var.c\ handle_alias.c\ lst_alias.c\ - minishellrc.c + minishellrc.c\ + export.c OBJS_DIR = objs/ SRCS_DIR = srcs/ diff --git a/srcs/alias.c b/srcs/alias.c index 8e4b9b6..a830676 100644 --- a/srcs/alias.c +++ b/srcs/alias.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/16 23:16:07 by marde-vr #+# #+# */ -/* Updated: 2024/02/18 17:20:54 by marde-vr ### ########.fr */ +/* Updated: 2024/02/18 19:05:38 by marde-vr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,10 +18,10 @@ char *get_alias_name(t_cmd *arg) char *res; i = 0; - while (arg->token[i] != '=') + while (arg->token[i] && arg->token[i] != '=') i++; i++; - res = ft_strdup(""); + res = ft_calloc(i, 1); ft_strlcpy(res, arg->token, i); return (res); } @@ -35,22 +35,60 @@ char *get_alias_value(t_cmd *arg) while (arg->token[i] != '=') i++; i++; - res = arg->token + i; + res = ft_strdup(arg->token + i); return (res); } -void print_aliases(t_alias **aliases) +int unalias(t_cmd *args, t_alias **aliases) { - (void)aliases; + t_alias *alias; + + if (args->next && !ft_strcmp(args->next->token, "-a")) + { + free_alias(*aliases); + *aliases = 0; + return (0); + } + alias = *aliases; + while (alias) + { + if (alias->next && args->next && !ft_strcmp(alias->next->name, args->next->token)) + { + if (alias->next->next) + alias->next = alias->next->next; + else + alias->next = 0; + alias->next = 0; + free_alias(alias); + return (0); + } + if (alias->next) + alias = alias->next; + else + alias = 0; + } + if (args->next && args->next->type == ARG) + ft_printf("minishell: unalias: %s: not found\n", args->next->token); + else + ft_printf("unalias: usage: unalias name\n"); + return (1); } int alias(t_cmd *args, t_alias **aliases) { char *name; char *value; + t_alias *cur_alias; + cur_alias = *aliases; if (!args->next || args->next->type != ARG) - print_aliases(aliases); + { + while (cur_alias) + { + ft_printf("alias %s=%s\n", cur_alias->name, cur_alias->value); + cur_alias = cur_alias->next; + } + } else { name = get_alias_name(args->next); @@ -61,7 +99,8 @@ int alias(t_cmd *args, t_alias **aliases) } else { - ft_get_alias(*aliases, name); + ft_printf("alias %s=%s\n", name, ft_get_alias(*aliases, name)); + free(name); } } return (0); diff --git a/srcs/exec.c b/srcs/exec.c index aa1d61b..7248959 100755 --- a/srcs/exec.c +++ b/srcs/exec.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/07 14:12:49 by tomoron #+# #+# */ -/* Updated: 2024/02/18 16:36:29 by tomoron ### ########.fr */ +/* Updated: 2024/02/18 18:32:33 by marde-vr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,6 @@ int exec_builtin(t_cmd *parsed_cmd, t_env **env, t_alias **aliases) { - if (!ft_strcmp(parsed_cmd->token, "echo")) g_return_code = echo(parsed_cmd->next); else if (!ft_strcmp(parsed_cmd->token, "ret")) @@ -27,8 +26,12 @@ int exec_builtin(t_cmd *parsed_cmd, t_env **env, t_alias **aliases) 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, "export")) + g_return_code = ft_export(parsed_cmd, env); else if (!ft_strcmp(parsed_cmd->token, "alias")) g_return_code = alias(parsed_cmd, aliases); + else if (!ft_strcmp(parsed_cmd->token, "unalias")) + g_return_code = unalias(parsed_cmd, aliases); else return (STDIN_FILENO); return (STDOUT_FILENO); diff --git a/srcs/export.c b/srcs/export.c new file mode 100644 index 0000000..fcb99e2 --- /dev/null +++ b/srcs/export.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* export.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: marde-vr +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/02/18 18:29:20 by marde-vr #+# #+# */ +/* Updated: 2024/02/18 18:39:39 by marde-vr ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int ft_export(t_cmd *cmd, t_env **env) +{ + (void)cmd; + (void)env; + return (0); +} diff --git a/srcs/minishell.h b/srcs/minishell.h index 9e5542f..41b00fa 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/18 17:10:42 by marde-vr ### ########.fr */ +/* Updated: 2024/02/18 18:32:24 by marde-vr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -79,5 +79,7 @@ int alias(t_cmd *args, t_alias **aliases); void free_alias(t_alias *alias); char *ft_get_alias(t_alias *alias, char *var_name); t_alias *alias_add_back(t_alias *alias, char *name, char *value); +int unalias(t_cmd *args, t_alias **aliases); +int ft_export(t_cmd *cmd, t_env **env); #endif diff --git a/srcs/minishellrc.c b/srcs/minishellrc.c index dccaecd..08dd059 100644 --- a/srcs/minishellrc.c +++ b/srcs/minishellrc.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/16 17:40:16 by marde-vr #+# #+# */ -/* Updated: 2024/02/18 17:10:16 by marde-vr ### ########.fr */ +/* Updated: 2024/02/18 18:01:11 by marde-vr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -34,9 +34,12 @@ void handle_minishellrc(t_env **env, t_alias **aliases) line = get_next_line(fd); while (line) { - parsed_cmd = parse_command(line, *env); - exec_command(parsed_cmd, env, aliases); - free(parsed_cmd); + if (line[0] != '#') + { + parsed_cmd = parse_command(line, *env); + exec_command(parsed_cmd, env, aliases); + free_cmd(parsed_cmd); + } free(line); line = get_next_line(fd); }