aboutsummaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-02-07 14:18:41 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-02-07 14:18:41 +0000
commitd486686eb768619714328bff86be8e7711c2e967 (patch)
tree2696605344958cecee6ba0ab3d2fb1d005954f1c /io.c
parentf605a6fcb788af156d79339d2a0b140ddac8846e (diff)
downloadruby-d486686eb768619714328bff86be8e7711c2e967.tar.gz
* io.c (io_getc): flush rb_stdout before read fro stdin, which is
connected to a tty. [ruby-core:4378] * rubyio.h (FMODE_TTY): renamed from FMODE_LINEBUF. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r--io.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/io.c b/io.c
index fd7312270e..3331d7c6a9 100644
--- a/io.c
+++ b/io.c
@@ -485,7 +485,7 @@ io_fwrite(str, fptr)
}
if ((fptr->mode & FMODE_SYNC) ||
(fptr->wbuf && fptr->wbuf_capa <= fptr->wbuf_len + len) ||
- ((fptr->mode & FMODE_LINEBUF) && memchr(RSTRING(str)->ptr+offset, '\n', len))) {
+ ((fptr->mode & FMODE_TTY) && memchr(RSTRING(str)->ptr+offset, '\n', len))) {
/* xxx: use writev to avoid double write if available */
if (fptr->wbuf_len && fptr->wbuf_len+len <= fptr->wbuf_capa) {
if (fptr->wbuf_capa < fptr->wbuf_off+fptr->wbuf_len+len) {
@@ -801,6 +801,9 @@ static int
io_getc(OpenFile *fptr)
{
int r;
+ if (fptr->fd == 0 && (fptr->mode & FMODE_TTY)) {
+ rb_io_flush(rb_stdout);
+ }
if (fptr->rbuf == NULL) {
fptr->rbuf_off = 0;
fptr->rbuf_len = 0;
@@ -2643,8 +2646,8 @@ rb_fdopen(fd, mode)
static void
io_check_tty(OpenFile *fptr)
{
- if ((fptr->mode & FMODE_WRITABLE) && isatty(fptr->fd))
- fptr->mode |= FMODE_LINEBUF|FMODE_DUPLEX;
+ if (isatty(fptr->fd))
+ fptr->mode |= FMODE_TTY|FMODE_DUPLEX;
}
static VALUE
@@ -3938,9 +3941,7 @@ prep_io(fd, mode, klass, path)
}
#endif
fp->mode = mode;
- if (fp->mode & FMODE_WRITABLE) {
- io_check_tty(fp);
- }
+ io_check_tty(fp);
if (path) fp->path = strdup(path);
return io;