int ft_cd(char **env, char *dir) { char *pwd; int i; if (!dir) dir = ft_get_home(env); dir = ft_split_custom(dir)[0]; if (dir[0] == '~') dir = ft_strjoin(ft_get_home(env), dir + 1); if (dir[0] == '-' && !dir[1]) { dir = env[ft_get_env(env, "OLDPWD")] + 7; ft_putendl(dir); } if (ft_strnequ(dir, "--", 2)) dir = ft_strjoin(ft_get_home(env), dir + 2); i = ft_get_env(env, "OLDPWD"); env[i] = ft_strjoin("OLDPWD=", ft_pwd()); if (chdir(dir) != 0) return (get_error_cd(dir)); pwd = ft_pwd(); i = ft_get_env(env, "PWD"); env[i] = ft_strjoin("PWD=", pwd); return (0); }
t_magic *ft_go_from_home(t_magic *magic, char **info) { int pwd; char *path; int access; pwd = ft_wline(magic->env, "PWD"); path = ft_get_home(magic->env); if ((access = ft_check_access_cd(path, &info[1][1])) == 0) { if (chdir(ft_strjoin(path, &info[1][1])) == 0) { magic = ft_set_oldpwd(magic); if (pwd >= 0) { free(magic->env[pwd]); magic->env[pwd] = ft_strjoin("PWD=", getcwd(NULL, 0)); } } free(magic->pwd); magic->pwd = ft_get_pwd(); } else ft_parse_error_cd(access, info[1]); return (magic); }
t_magic *ft_go_home(t_magic *magic) { char *home; int pwd; int access; pwd = ft_wline(magic->env, "PWD"); home = ft_get_home(magic->env); if ((access = ft_check_access_cd(home, "")) == 0) { if (chdir(home) == 0) { magic = ft_set_oldpwd(magic); if (pwd >= 0) { free(magic->env[pwd]); magic->env[pwd] = ft_strjoin("PWD=", getcwd(NULL, 0)); } } free(magic->pwd); magic->pwd = ft_get_pwd(); } else if (ft_strlen(home) > 0) ft_parse_error_cd(access, home); return (magic); }