From d6d99aefba7d4588f397f91b467767edae586689 Mon Sep 17 00:00:00 2001 From: tomoron Date: Fri, 22 Mar 2024 14:01:16 +0100 Subject: [PATCH] export et autres problemes --- srcs/exit.c | 13 ++++++++++++- srcs/export.c | 40 ++++++++++++++++++++++++++++++++++++++-- srcs/main.c | 3 ++- srcs/utils.c | 12 +----------- 4 files changed, 53 insertions(+), 15 deletions(-) diff --git a/srcs/exit.c b/srcs/exit.c index 61ed5c4..4deda30 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/03/06 09:10:11 by marde-vr ### ########.fr */ +/* Updated: 2024/03/22 13:34:06 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,6 +24,8 @@ void exit_bt(t_msh *msh) { t_cmd *cur_cmd; int exit_code; + int cmd_count; + cur_cmd = msh->cmds->next; ft_printf("exit\n"); @@ -42,6 +44,15 @@ void exit_bt(t_msh *msh) exit_code = (unsigned char)ft_atoi(cur_cmd->token); else exit_code = g_return_code; + if(msh->fds) + { + cmd_count = get_cmd_count(msh->cmds); + while(cmd_count) + { + free(msh->fds[cmd_count - 1]); + cmd_count--; + } + } free_msh(msh); exit(exit_code); } diff --git a/srcs/export.c b/srcs/export.c index 325fdb3..4745869 100644 --- a/srcs/export.c +++ b/srcs/export.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/18 18:29:20 by marde-vr #+# #+# */ -/* Updated: 2024/03/21 13:58:13 by tomoron ### ########.fr */ +/* Updated: 2024/03/22 13:52:29 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,13 +21,49 @@ void print_env_declare(t_env *env) } } +int check_var_name(char *name) +{ + while(*name) + { + if(!ft_isalnum(*name) && *name != '_') + return(0); + name++; + } + return(1); +} + int ft_export(t_msh *msh) { t_cmd *cmd; + char *arg; + char *name; + char *value; + int len; cmd = msh->cmds; - if(cmd && !cmd->next) + if(cmd && (!cmd->next || (cmd->next && cmd->next->type != ARG))) print_env_declare(msh->env); + if(cmd && cmd->next && cmd->next->type == ARG && (!cmd->next->next || + (cmd->next->next && cmd->next->next->type != ARG))) + { + arg = cmd->next->token; + len = 0; + while(arg[len] && arg[len] != '=') + len++; + name = ft_substr(arg, 0, len); + if(!name || !check_var_name(name)) + { + ft_putstr_fd("minishell: export: `", 2); + ft_putstr_fd(name, 2); + ft_putstr_fd("': not a valid identifier\n", 2); + free(name); + return(1); + } + if(arg[len]) + len++; + value = ft_strdup(arg + len); + msh->env = env_add_back(msh->env, name, value); + } return (0); } diff --git a/srcs/main.c b/srcs/main.c index da8632f..c5c81ab 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/03/21 13:55:20 by marde-vr ### ########.fr */ +/* Updated: 2024/03/22 13:35:19 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -88,6 +88,7 @@ int main(int argc, char **argv, char **envp) commands = (char *)1; init_minishell(&msh, argc, argv, envp); + msh->aliases = alias_add_back(msh->aliases, ft_strdup("ls"), ft_strdup("ls --color=auto")); while (msh->env && commands) { prompt = get_prompt(msh->env); diff --git a/srcs/utils.c b/srcs/utils.c index 87b9ee8..293a918 100644 --- a/srcs/utils.c +++ b/srcs/utils.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/05 18:19:26 by marde-vr #+# #+# */ -/* Updated: 2024/03/21 13:21:52 by tomoron ### ########.fr */ +/* Updated: 2024/03/22 13:33:45 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,21 +14,11 @@ void free_msh(t_msh *msh) { - int cmd_count = 0; if (msh) { free_env(msh->env); free_alias(msh->aliases); free(msh->pids); - if(msh->fds) - { - cmd_count = get_cmd_count(msh->cmds); - while(cmd_count) - { - free(msh->fds[cmd_count - 1]); - cmd_count--; - } - } free(msh->fds); free_cmd(msh->cmds); free(msh);