diff options
| author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-02-07 14:18:41 +0000 |
|---|---|---|
| committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-02-07 14:18:41 +0000 |
| commit | 1aacb6d9d7372e8c7da78b775eb15c999f977e2d (patch) | |
| tree | 2696605344958cecee6ba0ab3d2fb1d005954f1c | |
| parent | b3eef21e2a39f2c743dbd86308a4dbfc2962d43c (diff) | |
| download | ruby-1aacb6d9d7372e8c7da78b775eb15c999f977e2d.tar.gz ruby-1aacb6d9d7372e8c7da78b775eb15c999f977e2d.tar.xz ruby-1aacb6d9d7372e8c7da78b775eb15c999f977e2d.zip | |
* 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: http://svn.ruby-lang.org/repos/ruby/trunk@7913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ChangeLog | 7 | ||||
| -rw-r--r-- | io.c | 13 | ||||
| -rw-r--r-- | rubyio.h | 2 |
3 files changed, 15 insertions, 7 deletions
@@ -1,3 +1,10 @@ +Mon Feb 7 23:14:11 2005 Tanaka Akira <akr@m17n.org> + + * 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. + Mon Feb 7 02:13:05 2005 NAKAMURA Usaku <usa@ruby-lang.org> * ext/socket/extconf.rb (sockaddr_storage): winsock2.h have the @@ -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; @@ -46,7 +46,7 @@ typedef struct OpenFile { #define FMODE_CREATE 128 #define FMODE_BINMODE 4 #define FMODE_SYNC 8 -#define FMODE_LINEBUF 16 +#define FMODE_TTY 16 #define FMODE_DUPLEX 32 #define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr) |
