static int ft_stateprep_herdoc(t_list *begin, t_config *config) { t_stream *stream; stream = ft_save_stream(NULL); if (config->heredoc == 2 || !isatty(0)) return (ft_error(SHNAME, HEREDOC_ERR, BNDATA, 1 | SERROR)); config->heredoc = 1; config->shell_state = SCANNING_COMMAND; config->pwd_subrep = "heredoc> "; config->prompt_len = 9; ft_heredoc(begin, config, stream); ft_update_pwd(config); config->heredoc = 0; if (stream->state == REPROMPT) return (1); config->shell_state = RUNNING_COMMAND; return (0); }
void ft_dless(t_parser *parser, t_data *d) { char **tab; int fd; tab = ft_strsplit_shell(parser->left->str); if (!tab || !tab[0]) { ft_putendl_fd("parser error", 2); return ; } ft_heredoc(tab); ft_tabdel(&tab); fd = open("/tmp/.less", O_RDONLY); dup2(fd, 0); d->redirect = 0; ft_process_tree(parser->right, d); d->redirect = 1; dup2(d->save_fd[0], 0); close(fd); }