diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-08-19 07:33:15 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-08-19 07:33:15 +0000 |
commit | d73fa69935a2d6657e13bfe2d3fa266fef55614d (patch) | |
tree | 2b91232f5c6bf8601ed38337fae396d2e391a41e /io.c | |
parent | 4c57b2b49905d652fb500249c34303d8c0571155 (diff) | |
download | ruby-d73fa69935a2d6657e13bfe2d3fa266fef55614d.tar.gz |
* 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
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 13 |
1 files changed, 6 insertions, 7 deletions
@@ -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; } |