void ft_path(t_info *info) { char *tmp; char *pwd_tmp; info->error = 0; if (!(pwd_tmp = getcwd(NULL, 0))) { if (info->w == 0 && ft_strcmp(info->av[1], "..") == 0) { ft_cd_error(info, 1); return ; } else pwd_tmp = ft_strdup(get_element(info, "PWD", 1)); } if ((chdir(info->av[1])) != 0) (access(info->av[1], F_OK)) ? ft_cd_error(info, 1) : ft_cd_error(info, 3); else { rep_element(info->lst, "OLDPWD", pwd_tmp); tmp = getcwd(NULL, 0); rep_element(info->lst, "PWD", tmp); free(tmp); } free(pwd_tmp); }
void ft_cd_plus(t_info *info, char *home) { if (chdir(home) != 0 && info->error == 2) { ft_cd_error(info, 4); ft_putstr_fd(home, 2); ft_putstr_fd("\n", 2); } (info->error != 2 && info->error != 0) ? ft_cd_error(info, 2) : 1; if (info->error == 0) { rep_element(info->lst, "OLDPWD", get_element(info, "PWD", 1)); rep_element(info->lst, "PWD", home); } }
void ft_cd(t_term *term) { struct stat bufstat; ft_cd2(term); if (term->cmds[1] && term->cmds[1][0] == '~' && term->cmds[1][1]) { if (!ft_get_val_exists(term, "HOME")) return (ft_putendl("NO HOME")); term->cmds[1] = ft_strjoin(ft_get_val(term, "HOME"), &term->cmds[1][1]); } if (!term->cmds[1] || (term->cmds[1] && term->cmds[1][0] == '~')) return (ft_cd_home(term)); else { if (access(term->cmds[1], R_OK)) return (ft_cd_error(term->cmds[1])); if (lstat(term->cmds[1], &bufstat) == -1) { return (ft_putendl(ft_strjoin( "cd: no such file or directory: ", term->cmds[1]))); } } ft_cd_suite(term); }