Beispiel #1
0
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);
}
Beispiel #2
0
// 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);
}
Beispiel #3
0
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);
}