void ft_cd(char *buf, t_params *p) { char **av; char *new_dir; int ret; int size; ret = 0; av = ft_split(buf); new_dir = NULL; size = av_size(av); if (size > 2) ft_putendl("cd: syntax error"); else if (size == 1 || (size == 2 && !ft_strcmp(av[1], "~"))) new_dir = ft_strdup(p->home); else new_dir = get_newdir(p, av[1]); if (new_dir && !(ret = check_path(new_dir)) && !chdir(new_dir)) update_env(p, new_dir); else if (new_dir && !(ret = check_path(new_dir)) && chdir(new_dir) == -1) ft_print_error("cd: not a directory: ", av[1]); if (new_dir && ret && av[1]) improper_path(ret, av[1]); ft_strdel(&new_dir); del_av(av); }
static void cd_proc(t_env *env, char *new_dir, char *av) { int ret; if (new_dir && !(ret = check_path(new_dir)) && !chdir(new_dir)) { if (av[0] == '/') update_env(&env, new_dir); else update_env(&env, "/nfs"); } if (ret) { improper_path(ret, av); g_pid.built = 0; } set_flag(&env, 0); }