diff options
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -213,6 +213,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; @@ -221,7 +223,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_RBUF; |