summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-01-10 16:52:09 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-01-10 16:52:09 +0000
commitfe4581bf4be9a5791e54dbefd58e038bffb00b9c (patch)
tree14b80101105d3fc42f7b0e1dd674e9fff6af519d /io.c
parent766f57229cb947d9f5de3e29eeb1491b82766dbd (diff)
* configure.in (RUBY_CHECK_IO_NEED): added more tests.
* io.c (rb_io_check_readable): seek after synchronized write. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@3327 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r--io.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/io.c b/io.c
index 7959961a64..fe836db7f6 100644
--- a/io.c
+++ b/io.c
@@ -176,6 +176,8 @@ flush_before_seek(fptr)
# define SEEK_END 2
#endif
+#define FMODE_SYNCWRITE (FMODE_SYNC|FMODE_WRITABLE)
+
void
rb_io_check_readable(fptr)
OpenFile *fptr;
@@ -184,7 +186,9 @@ rb_io_check_readable(fptr)
rb_raise(rb_eIOError, "not opened for reading");
}
#if NEED_IO_SEEK_BETWEEN_RW
- if ((fptr->mode & FMODE_WBUF) && !fptr->f2) {
+ if (((fptr->mode & FMODE_WBUF) ||
+ (fptr->mode & (FMODE_SYNCWRITE|FMODE_RBUF)) == FMODE_SYNCWRITE) &&
+ !fptr->f2) {
io_seek(fptr, 0, SEEK_CUR);
fptr->mode &= ~FMODE_WBUF;
}