From 047604ad9b70a5895b7272ff5e34aa20ab79405f Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 10 Oct 2016 03:37:09 +0000 Subject: [PATCH] io.c: reduce isatty on Cygwin [ci skip] * io.c (prep_io): reduce isatty call (and its system call) on Cygwin. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56383 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ io.c | 19 ++++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index e2e4406282..4dd7e079db 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Oct 10 12:37:06 2016 Nobuyoshi Nakada + + * io.c (prep_io): reduce isatty call (and its system call) on + Cygwin. + Sun Oct 9 23:05:53 2016 Prathamesh Sonpatki * array.c, class.c: Fixed documentation where Fixnum was referred diff --git a/io.c b/io.c index e9ff6f5ff9..17ec6baa81 100644 --- a/io.c +++ b/io.c @@ -5518,11 +5518,13 @@ rb_fdopen(int fd, const char *modestr) return file; } -static void +static int io_check_tty(rb_io_t *fptr) { - if (isatty(fptr->fd)) + int t = isatty(fptr->fd); + if (t) fptr->mode |= FMODE_TTY|FMODE_DUPLEX; + return t; } static VALUE rb_io_internal_encoding(VALUE); @@ -7370,14 +7372,13 @@ prep_io(int fd, int fmode, VALUE klass, const char *path) MakeOpenFile(io, fp); fp->fd = fd; -#ifdef __CYGWIN__ - if (!isatty(fd)) { - fmode |= FMODE_BINMODE; - setmode(fd, O_BINARY); - } -#endif fp->mode = fmode; - io_check_tty(fp); + if (!io_check_tty(fp)) { +#ifdef __CYGWIN__ + fp->fmode |= FMODE_BINMODE; + setmode(fd, O_BINARY); +#endif + } if (path) fp->pathv = rb_obj_freeze(rb_str_new_cstr(path)); rb_update_max_fd(fd);