Martin Maechler wrote: > Thanks, Jeffrey, > > that (change) looks very logical, reasonable, ... > and I'll commit a patch to R-devel ASAP. > > On the other hand, I'm currently not intending to port the fix > to the currently "deep frozen" R-2.4-branch [because "you never know ..."] > unless you can argue a bit more why the change seems important > (or at least can demonstrate bogous behavior that is fixed by it).
Not a big deal at the moment... although I would have argued for its inclusion into R 2.4 if rJava, a well established package used by JGR, demonstrated bogus behavior... because it does depend on R_WriteConsole, but it turns out that rjava ignores the second argument defining the length of the buffer to be printed. Is this appropriate? rJava is making an assumption that in a call to R_WriteConsole, the buffer is always null terminated, and this seems supported by the R source. The following grep output on R-2-4-branch (but probably in R-trunk, too) shows that each call to R_WriteConsole *does* pass null-terminated strings: # some of the output has been edited $ find . -follow -name '*.[ch]' | xargs grep -B 1 R_WriteConsole ./src/library/grDevices/src/devWindows.c- setstatus(msg); ./src/library/grDevices/src/devWindows.c: R_WriteConsole(msg, strlen(msg)); ./src/library/grDevices/src/devWindows.c: R_WriteConsole("\n", 1); -- ./src/main/printutils.c-#endif /* HAVE_VA_COPY */ ./src/main/printutils.c: R_WriteConsole(p, strlen(buf)); -- ./src/main/printutils.c- slen = strlen(buf); ./src/main/printutils.c: R_WriteConsole(buf, slen); -- ./src/gnuwin32/sys-win32.c- } else ./src/gnuwin32/sys-win32.c: R_WriteConsole(buf, strlen(buf)); -- ./src/gnuwin32/system.c- buf[len] = '\0'; ./src/gnuwin32/system.c: R_WriteConsole(buf, strlen(buf)); -- ./src/gnuwin32/system.c- fflush(R_Consolefile); ./src/gnuwin32/system.c: } else R_WriteConsole(s, strlen(s)); Jeff > > Martin > >>>>>> "Jeffrey" == Jeffrey Horner <[EMAIL PROTECTED]> >>>>>> on Fri, 29 Sep 2006 15:22:51 -0500 writes: > > Jeffrey> In R-2-4-branch r39548, Rcons_vprintf is called from > stdout_vfprintf > Jeffrey> when R_Outputfile is NULL. When called and output is greater > than > Jeffrey> R_BUFSIZE, output is truncated to R_BUFSIZE. Here's a one-line > fix: > > Jeffrey> Index: src/main/printutils.c > Jeffrey> > =================================================================== > Jeffrey> --- src/main/printutils.c (revision 39548) > Jeffrey> +++ src/main/printutils.c (working copy) > Jeffrey> @@ -638,7 +638,7 @@ > Jeffrey> res = R_BUFSIZE; > Jeffrey> } > Jeffrey> #endif /* HAVE_VA_COPY */ > Jeffrey> - R_WriteConsole(p, strlen(buf)); > Jeffrey> + R_WriteConsole(p, strlen(p)); > Jeffrey> #ifdef HAVE_VA_COPY > Jeffrey> if(usedRalloc) vmaxset(vmax); > Jeffrey> if(usedVasprintf) free(p); > > > Jeffrey> Jeff > Jeffrey> -- > Jeffrey> http://biostat.mc.vanderbilt.edu/JeffreyHorner > -- http://biostat.mc.vanderbilt.edu/JeffreyHorner ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel