From 3c5ad3ad89155030f25f1fd8d4a8ba9c98e1618b Mon Sep 17 00:00:00 2001 From: tomoron Date: Tue, 23 Apr 2024 19:54:44 +0200 Subject: [PATCH] cd - et oldpwd pwd --- srcs/builtins.c | 4 ++-- srcs/cd.c | 50 +++++++++++++++++++++++++++++++++--------------- srcs/minishell.h | 4 ++-- 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/srcs/builtins.c b/srcs/builtins.c index 2774c29..9db8d2c 100755 --- a/srcs/builtins.c +++ b/srcs/builtins.c @@ -6,7 +6,7 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/05 18:20:21 by marde-vr #+# #+# */ -/* Updated: 2024/04/23 18:08:20 by tomoron ### ########.fr */ +/* Updated: 2024/04/23 19:54:21 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -30,7 +30,7 @@ int cmd_is_builtin(t_msh *msh, char *cmd_token) && cmd_is_forkable_builtin(cmd_token) && ft_strcmp(cmd_token, "export")) return (1); else if (!ft_strcmp(cmd_token, "cd")) - g_return_code = cd(msh->tokens, msh->env, msh); + g_return_code = cd(msh->tokens, msh); else if (!ft_strcmp(cmd_token, "exit")) g_return_code = exit_bt(msh); else if (!ft_strcmp(cmd_token, "export") && msh->out_type != PIPE) diff --git a/srcs/cd.c b/srcs/cd.c index 12ae283..0d68eea 100755 --- a/srcs/cd.c +++ b/srcs/cd.c @@ -6,18 +6,18 @@ /* By: marde-vr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/16 21:02:54 by marde-vr #+# #+# */ -/* Updated: 2024/04/23 18:34:12 by tomoron ### ########.fr */ +/* Updated: 2024/04/23 19:52:01 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -void cd_update_pwd(char *new_path, t_msh *msh) +void cd_update_pwd(t_msh *msh) { char *pwd; char *new; - new = ft_strdup(new_path); + new = getcwd(0, 16382); if (!new) return ; pwd = ft_get_env(msh->env, "PWD"); @@ -33,7 +33,34 @@ void cd_update_pwd(char *new_path, t_msh *msh) msh->env = export_set_env(msh->env, ft_strdup("PWD"), new, 0); } -int cd(t_token *args, t_env *env, t_msh *msh) +char *get_new_wd(t_token *arg, t_msh *msh) +{ + char *new_wd; + + if (arg) + { + new_wd = arg->value; + if(ft_strcmp("-", new_wd)) + { + new_wd = ft_get_env(msh->env, "OLDPWD"); + if(!new_wd) + ft_putstr_fd("minishell: cd: OLDPWD not set\n", 2); + if(!new_wd) + return(0); + } + } + else + { + new_wd = ft_get_env(msh->env, "HOME"); + if (!new_wd) + ft_putstr_fd("minishell: cd: HOME not set\n", 2); + if (!new_wd) + return (0); + } + return(new_wd); +} + +int cd(t_token *args, t_msh *msh) { char *new_wd; @@ -42,21 +69,14 @@ int cd(t_token *args, t_env *env, t_msh *msh) ft_printf_fd(2, "minishell: cd: too many arguments\n"); return (1); } - if (!args->next) - { - new_wd = ft_get_env(env, "HOME"); - if (!new_wd) - ft_putstr_fd("minishell: cd: HOME not set\n", 2); - if (!new_wd) - return (1); - } - else - new_wd = args->next->value; - cd_update_pwd(new_wd, msh); + new_wd = get_new_wd(args->next, msh); + if(!new_wd) + return(1); if (chdir(new_wd) == -1) { perror("minishell: cd"); return (1); } + cd_update_pwd(msh); return (0); } diff --git a/srcs/minishell.h b/srcs/minishell.h index e10a74e..307f27c 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/04/23 18:42:10 by tomoron ### ########.fr */ +/* Updated: 2024/04/23 19:52:16 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ @@ -156,7 +156,7 @@ int echo(t_token *args); int exit_bt(t_msh *msh); int is_cmd_type(t_cmd *cmd); int is_cmd_char(char c); -int cd(t_token *args, t_env *env, t_msh *msh); +int cd(t_token *args, t_msh *msh); int pwd(void); #endif