cd - et oldpwd pwd
This commit is contained in:
@ -6,7 +6,7 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/03/05 18:20:21 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"))
|
&& cmd_is_forkable_builtin(cmd_token) && ft_strcmp(cmd_token, "export"))
|
||||||
return (1);
|
return (1);
|
||||||
else if (!ft_strcmp(cmd_token, "cd"))
|
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"))
|
else if (!ft_strcmp(cmd_token, "exit"))
|
||||||
g_return_code = exit_bt(msh);
|
g_return_code = exit_bt(msh);
|
||||||
else if (!ft_strcmp(cmd_token, "export") && msh->out_type != PIPE)
|
else if (!ft_strcmp(cmd_token, "export") && msh->out_type != PIPE)
|
||||||
|
46
srcs/cd.c
46
srcs/cd.c
@ -6,18 +6,18 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/02/16 21:02:54 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"
|
#include "minishell.h"
|
||||||
|
|
||||||
void cd_update_pwd(char *new_path, t_msh *msh)
|
void cd_update_pwd(t_msh *msh)
|
||||||
{
|
{
|
||||||
char *pwd;
|
char *pwd;
|
||||||
char *new;
|
char *new;
|
||||||
|
|
||||||
new = ft_strdup(new_path);
|
new = getcwd(0, 16382);
|
||||||
if (!new)
|
if (!new)
|
||||||
return ;
|
return ;
|
||||||
pwd = ft_get_env(msh->env, "PWD");
|
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);
|
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;
|
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");
|
ft_printf_fd(2, "minishell: cd: too many arguments\n");
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
if (!args->next)
|
new_wd = get_new_wd(args->next, msh);
|
||||||
{
|
|
||||||
new_wd = ft_get_env(env, "HOME");
|
|
||||||
if (!new_wd)
|
|
||||||
ft_putstr_fd("minishell: cd: HOME not set\n", 2);
|
|
||||||
if(!new_wd)
|
if(!new_wd)
|
||||||
return(1);
|
return(1);
|
||||||
}
|
|
||||||
else
|
|
||||||
new_wd = args->next->value;
|
|
||||||
cd_update_pwd(new_wd, msh);
|
|
||||||
if (chdir(new_wd) == -1)
|
if (chdir(new_wd) == -1)
|
||||||
{
|
{
|
||||||
perror("minishell: cd");
|
perror("minishell: cd");
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
cd_update_pwd(msh);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
/* By: marde-vr <marde-vr@42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/02/04 17:31:38 by tomoron #+# #+# */
|
/* 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 exit_bt(t_msh *msh);
|
||||||
int is_cmd_type(t_cmd *cmd);
|
int is_cmd_type(t_cmd *cmd);
|
||||||
int is_cmd_char(char c);
|
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);
|
int pwd(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user