示例#1
0
文件: redir.c 项目: martres/42sh
extern int	redir_right(char ***str)
{
  char		**cmd;
  char		*fichier;
  int		type;
  int		pos_red;

  cmd = *str;
  pos_red = 0;
  fichier = NULL;
  while ((pos_red = get_next_redir_right(cmd, pos_red)) != -1)
    {
      if (cmd[pos_red + 1] == NULL
	  || check_redir_right(cmd[pos_red + 1]) == FALSE)
	{
	  my_printf("42sh: syntax error near unexprected token 'newline'\n");
	  return (FALSE);
	}
      fichier = my_strdup(cmd[pos_red + 1]);
      type = get_type_redir(cmd[pos_red]);
      cmd = my_remove_in_tab(my_remove_in_tab(cmd, pos_red), pos_red);
    }
  if (fichier != NULL)
    if (exec_redir_right(fichier, type) == FALSE)
      return (FALSE);
  *str = cmd;
  return (TRUE);
}
int		redir_right(t_vars *v)
{
  t_vars	*redir;
  t_redir	*r_r;
  int		exe;

  r_r = my_xmalloc(sizeof(*r_r));
  redir = my_xmalloc(sizeof(*redir));
  init_vars(redir);
  init_redir_simp(v, r_r, '>');
  if (!check_nb(r_r) || !check_redir_right(redir, r_r))
    {
      redir = free_t_vars(redir);
      r_r = free_redirs_vars(r_r);
      return (EXIT_FAILURE);
    }
  exe = do_r_r(redir, r_r);
  redir = free_t_vars(redir);
  r_r = free_redirs_vars(r_r);
  return (exe);
}