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); }
// Parse a prefix expr. // // prefix-expr ::= if-expr | succ-epxr | pred-expr | iszero-expr // | print-expr | typeof-expr Tree* parse_prefix_expr(Parser& p) { if (Tree* t = parse_if_expr(p)) return t; if (Tree* t = parse_succ_expr(p)) return t; if (Tree* t = parse_pred_expr(p)) return t; if (Tree* t = parse_iszero_expr(p)) return t; if (Tree* t = parse_print_expr(p)) return t; if (Tree* t = parse_typeof_expr(p)) return t; if (Tree* t = parse_ls(p)) return t; if (Tree* t = parse_mkdir(p)) return t; if (Tree* t = parse_rmdir(p)) return t; if (Tree* t = parse_cd(p)) return t; if (Tree* t = parse_mv(p)) return t; return parse_postfix_expr(p); }
static int sh_cmd(t_cmd *cmd) { int ret; ret = 2; if (!ft_strcmp(cmd->cmd, "echo")) ret = echo_dol(cmd); cmd->ret = 0; if (ret && !(ret = ft_strcmp(cmd->cmd, "setenv"))) parse_setenv(cmd); else if (ret && !(ret = ft_strcmp(cmd->cmd, "unsetenv"))) parse_unsetenv(cmd); else if (ret && !(ret = ft_strcmp(cmd->cmd, "env"))) parse_env(cmd); else if (ret && !(ret = ft_strcmp(cmd->cmd, "pwd"))) sh_pwd(cmd); else if (ret && !(ret = ft_strcmp(cmd->cmd, "cd"))) parse_cd(cmd); return (ret); }