void REvprintf(const char *format, va_list arg) { if(R_ErrorCon != 2) { Rconnection con = getConnection_no_err(R_ErrorCon); if(con == NULL) { /* should never happen, but in case of corruption... */ R_ErrorCon = 2; } else { /* Parentheses added for FC4 with gcc4 and -D_FORTIFY_SOURCE=2 */ (con->vfprintf)(con, format, arg); con->fflush(con); return; } } if(R_Consolefile) { /* try to interleave stdout and stderr carefully */ if(R_Outputfile && (R_Outputfile != R_Consolefile)) { fflush(R_Outputfile); vfprintf(R_Consolefile, format, arg); /* normally R_Consolefile is stderr and so unbuffered, but it can be something else (e.g. stdout on Win9x) */ fflush(R_Consolefile); } else vfprintf(R_Consolefile, format, arg); } else { char buf[BUFSIZE]; vsnprintf(buf, BUFSIZE, format, arg); buf[BUFSIZE-1] = '\0'; R_WriteConsoleEx(buf, (int) strlen(buf), 1); } }
static void cat_cleanup(void *data) { cat_info *pci = (cat_info *) data; Rconnection con = pci->con; Rboolean wasopen = pci->wasopen; int changedcon = pci->changedcon; con->fflush(con); if(changedcon) switch_stdout(-1, 0); /* previous line might have closed it */ if(!wasopen && con->isopen) con->close(con); #ifdef Win32 WinUTF8out = FALSE; #endif }
void Rvprintf(const char *format, va_list arg) { int i=0, con_num=R_OutputCon; Rconnection con; va_list argcopy; static int printcount = 0; if (++printcount > 100) { R_CheckUserInterrupt(); printcount = 0 ; } do{ con = getConnection(con_num); va_copy(argcopy, arg); /* Parentheses added for Fedora with -D_FORTIFY_SOURCE=2 */ (con->vfprintf)(con, format, argcopy); va_end(argcopy); con->fflush(con); con_num = getActiveSink(i++); } while(con_num>0); }