summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-12-23 10:12:35 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-12-23 10:12:35 +0000
commit4ff1561a8c3a0b1eb682feb7a03e2d1300e4abfa (patch)
tree4350800533845f058600f124774a4067cc705938 /io.c
parent13fde676feb8c1280f674cb7537fb680bb86eef7 (diff)
* rubyio.h: rename FMODE_UNSEEKABLE to FMODE_DUPLEX.
* io.c (io_check_tty): extracted function to set FMODE_LINEBUF and FMODE_DUPLEX. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7641 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r--io.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/io.c b/io.c
index e2547bc544..d92d548998 100644
--- a/io.c
+++ b/io.c
@@ -209,13 +209,13 @@ io_unread(OpenFile *fptr)
{
off_t r;
rb_io_check_closed(fptr);
- if (fptr->rbuf_len == 0 || fptr->mode & FMODE_UNSEEKABLE)
+ if (fptr->rbuf_len == 0 || fptr->mode & FMODE_DUPLEX)
return;
/* xxx: target position may be negative if buffer is filled by ungetc */
r = lseek(fptr->fd, -fptr->rbuf_len, SEEK_CUR);
if (r < 0) {
if (errno == ESPIPE)
- fptr->mode |= FMODE_UNSEEKABLE;
+ fptr->mode |= FMODE_DUPLEX;
return;
}
fptr->rbuf_off = 0;
@@ -2555,7 +2555,7 @@ rb_fopen(fname, mode)
rb_warn("setvbuf() can't be honoured for %s", fname);
#endif
#ifdef __human68k__
- fmode(file, _IOTEXT);
+ setmode(fileno(file), O_TEXT);
#endif
return file;
}
@@ -2601,6 +2601,13 @@ rb_fdopen(fd, mode)
return file;
}
+static void
+io_check_tty(OpenFile *fptr)
+{
+ if ((fptr->mode & FMODE_WRITABLE) && isatty(fptr->fd))
+ fptr->mode |= FMODE_LINEBUF|FMODE_DUPLEX;
+}
+
static VALUE
rb_file_open_internal(io, fname, mode)
VALUE io;
@@ -2612,8 +2619,7 @@ rb_file_open_internal(io, fname, mode)
fptr->mode = rb_io_mode_flags(mode);
fptr->path = strdup(fname);
fptr->fd = rb_sysopen(fptr->path, rb_io_mode_modenum(rb_io_flags_mode(fptr->mode)), 0666);
- if ((fptr->mode & FMODE_WRITABLE) && isatty(fptr->fd))
- fptr->mode |= FMODE_LINEBUF;
+ io_check_tty(fptr);
return io;
}
@@ -2638,8 +2644,7 @@ rb_file_sysopen_internal(io, fname, flags, mode)
fptr->path = strdup(fname);
fptr->mode = rb_io_modenum_flags(flags);
fptr->fd = rb_sysopen(fptr->path, flags, mode);
- if ((fptr->mode & FMODE_WRITABLE) && isatty(fptr->fd))
- fptr->mode |= FMODE_LINEBUF;
+ io_check_tty(fptr);
return io;
}
@@ -2930,7 +2935,7 @@ pipe_open(argc, argv, mode)
MakeOpenFile(port, fptr);
fptr->fd = fd;
fptr->stdio_file = fp;
- fptr->mode = modef | FMODE_SYNC;
+ fptr->mode = modef | FMODE_SYNC|FMODE_DUPLEX;
fptr->pid = pid;
#if defined (__CYGWIN__) || !defined(HAVE_FORK)
@@ -3883,9 +3888,7 @@ prep_stdio(f, mode, klass)
if (fp->fd == 2) { /* stderr must be unbuffered */
fp->mode |= FMODE_SYNC;
}
- if (isatty(fp->fd)) {
- fp->mode |= FMODE_LINEBUF;
- }
+ io_check_tty(fp);
}
return io;
@@ -3967,8 +3970,7 @@ rb_io_initialize(argc, argv, io)
MakeOpenFile(io, fp);
fp->fd = fd;
fp->mode = rb_io_modenum_flags(flags);
- if ((fp->mode & FMODE_WRITABLE) && isatty(fp->fd))
- fp->mode |= FMODE_LINEBUF;
+ io_check_tty(fp);
}
else if (RFILE(io)->fptr) {
rb_raise(rb_eRuntimeError, "reinitializing IO");