summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
Diffstat (limited to 'io.c')
-rw-r--r--io.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/io.c b/io.c
index 31b07f9c0a..3f35c1982c 100644
--- a/io.c
+++ b/io.c
@@ -6151,6 +6151,14 @@ rb_io_reopen(int argc, VALUE *argv, VALUE file)
if (setvbuf(fptr->stdio_file, NULL, _IOFBF, 0) != 0)
rb_warn("setvbuf() can't be honoured for %s", RSTRING_PTR(fptr->pathv));
#endif
+ if (fptr->stdio_file == stderr) {
+ if (setvbuf(fptr->stdio_file, NULL, _IONBF, BUFSIZ) != 0)
+ rb_warn("setvbuf() can't be honoured for %s", RSTRING_PTR(fptr->pathv));
+ }
+ else if (fptr->stdio_file == stdout && isatty(fptr->fd)) {
+ if (setvbuf(fptr->stdio_file, NULL, _IOLBF, BUFSIZ) != 0)
+ rb_warn("setvbuf() can't be honoured for %s", RSTRING_PTR(fptr->pathv));
+ }
}
else {
if (close(fptr->fd) < 0)