void apply_cd(char *command) { char **av; int size; t_env *env; av = ft_strsplit(command, ' '); size = av_size(av); env = init_env(NULL, 0); if (!parse_cd(av)) { if (size == 1 || (size == 2 && !ft_strcmp(av[1], "-P")) || (size == 2 && !ft_strcmp(av[1], "-L")) || (size == 2 && !ft_strcmp(av[1], "~")) || (size == 3 && !ft_strcmp(av[2], "~"))) { if (!chdir(env->home)) update_env(&env, "/nfs"); set_flag(&env, 0); } else go_newdir(env, av[size - 1]); if (g_pid.built == -1) g_pid.built = 1; } del_av(av); }
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); }