From d73fa69935a2d6657e13bfe2d3fa266fef55614d Mon Sep 17 00:00:00 2001 From: matz Date: Thu, 19 Aug 2004 07:33:15 +0000 Subject: * dir.c (free_dir): fix memory leak. reported by yamamoto madoka. * eval.c (bind_eval): new method. [RCR 251] * string.c (rb_str_clear): new method. [ruby-dev:24104] * io.c (rb_io_reopen): should clear allocated OpenFile. pointed out by Guy Decoux. [ruby-core:03288] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6794 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- io.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'io.c') diff --git a/io.c b/io.c index 29839d376c..d64e41d683 100644 --- a/io.c +++ b/io.c @@ -235,9 +235,6 @@ rb_io_check_readable(fptr) OpenFile *fptr; { rb_io_check_closed(fptr); - if (!(fptr->mode & FMODE_READABLE)) { - rb_raise(rb_eIOError, "not opened for reading"); - } #if NEED_IO_SEEK_BETWEEN_RW if (((fptr->mode & FMODE_WBUF) || (fptr->mode & (FMODE_SYNCWRITE|FMODE_RBUF)) == FMODE_SYNCWRITE) && @@ -257,6 +254,9 @@ rb_io_check_writable(fptr) if (!(fptr->mode & FMODE_WRITABLE)) { rb_raise(rb_eIOError, "not opened for writing"); } + if (READ_DATA_BUFFERED(fptr->f)) { + rb_warn("read buffer data lost"); + } #if NEED_IO_SEEK_BETWEEN_RW if ((fptr->mode & FMODE_RBUF) && !feof(fptr->f) && !fptr->f2) { io_seek(fptr, 0, SEEK_CUR); @@ -1913,10 +1913,9 @@ rb_io_fptr_finalize(fptr) free(fptr->path); fptr->path = 0; } - if (!fptr->f && !fptr->f2) return 0; - if (fileno(fptr->f) < 3) return 0; - - rb_io_fptr_cleanup(fptr, Qtrue); + if ((fptr->f && fileno(fptr->f) > 2) || fptr->f2) { + rb_io_fptr_cleanup(fptr, Qtrue); + } free(fptr); return 1; } -- cgit v1.2.3