ruby-changes:9500
From: yugui <ko1@a...>
Date: Thu, 25 Dec 2008 19:14:37 +0900 (JST)
Subject: [ruby-changes:9500] Ruby:r21040 (ruby_1_9_1): merges r20989 from trunk into ruby_1_9_1.
yugui 2008-12-25 18:58:07 +0900 (Thu, 25 Dec 2008) New Revision: 21040 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21040 Log: merges r20989 from trunk into ruby_1_9_1. * io.c (flush_before_seek): check io_fflush result. (rb_io_check_readable): ditto. (rb_io_flush): ditto. (rb_io_fsync): ditto. (remain_size): ditto. (rb_io_write_nonblock): ditto. (finish_writeconv): ditto. (fptr_finalize): ditto. (io_reopen): ditto. (rb_io_reopen): ditto. (copy_stream_body): ditto. Modified files: branches/ruby_1_9_1/ChangeLog branches/ruby_1_9_1/io.c branches/ruby_1_9_1/test/ruby/test_io.rb Index: ruby_1_9_1/ChangeLog =================================================================== --- ruby_1_9_1/ChangeLog (revision 21039) +++ ruby_1_9_1/ChangeLog (revision 21040) @@ -1,3 +1,17 @@ +Thu Dec 25 16:23:31 2008 Tanaka Akira <akr@f...> + + * io.c (flush_before_seek): check io_fflush result. + (rb_io_check_readable): ditto. + (rb_io_flush): ditto. + (rb_io_fsync): ditto. + (remain_size): ditto. + (rb_io_write_nonblock): ditto. + (finish_writeconv): ditto. + (fptr_finalize): ditto. + (io_reopen): ditto. + (rb_io_reopen): ditto. + (copy_stream_body): ditto. + Thu Dec 25 15:54:00 2008 Yukihiro Matsumoto <matz@r...> * io.c (io_fflush): flush write buffer without write lock in Index: ruby_1_9_1/io.c =================================================================== --- ruby_1_9_1/io.c (revision 21039) +++ ruby_1_9_1/io.c (revision 21040) @@ -340,7 +340,8 @@ static rb_io_t * flush_before_seek(rb_io_t *fptr) { - io_fflush(fptr); + if (io_fflush(fptr) < 0) + rb_sys_fail(0); io_unread(fptr); errno = 0; return fptr; @@ -365,12 +366,14 @@ rb_raise(rb_eIOError, "not opened for reading"); } if (fptr->wbuf_len) { - io_fflush(fptr); + if (io_fflush(fptr) < 0) + rb_sys_fail(0); } if (fptr->tied_io_for_writing) { rb_io_t *wfptr; GetOpenFile(fptr->tied_io_for_writing, wfptr); - io_fflush(wfptr); + if (io_fflush(wfptr) < 0) + rb_sys_fail(0); } } @@ -988,7 +991,8 @@ GetOpenFile(io, fptr); if (fptr->mode & FMODE_WRITABLE) { - io_fflush(fptr); + if (io_fflush(fptr) < 0) + rb_sys_fail(0); #ifdef _WIN32 fsync(fptr->fd); #endif @@ -1284,7 +1288,8 @@ io = GetWriteIO(io); GetOpenFile(io, fptr); - io_fflush(fptr); + if (io_fflush(fptr) < 0) + rb_sys_fail(0); if (fsync(fptr->fd) < 0) rb_sys_fail_path(fptr->pathv); return INT2FIX(0); @@ -1452,7 +1457,8 @@ #endif ) { - io_fflush(fptr); + if (io_fflush(fptr) < 0) + rb_sys_fail(0); pos = lseek(fptr->fd, 0, SEEK_CUR); if (st.st_size >= pos && pos >= 0) { siz += st.st_size - pos; @@ -1893,7 +1899,8 @@ GetOpenFile(io, fptr); rb_io_check_writable(fptr); - io_fflush(fptr); + if (io_fflush(fptr) < 0) + rb_sys_fail(0); rb_io_set_nonblock(fptr); n = write(fptr->fd, RSTRING_PTR(str), RSTRING_LEN(str)); @@ -3061,7 +3068,8 @@ res = econv_destination_buffer_full; while (res == econv_destination_buffer_full) { if (fptr->wbuf_len == fptr->wbuf_capa) { - io_fflush(fptr); + if (io_fflush(fptr) < 0 && !noraise) + rb_sys_fail(0); } ds = dp = (unsigned char *)fptr->wbuf + fptr->wbuf_off + fptr->wbuf_len; @@ -3109,7 +3117,8 @@ } } if (fptr->wbuf_len) { - io_fflush(fptr); + if (io_fflush(fptr) < 0 && !noraise) + rb_sys_fail(0); } if (IS_PREP_STDIO(fptr) || fptr->fd <= 2) { @@ -5194,10 +5203,12 @@ pos = io_tell(orig); } if (orig->mode & FMODE_WRITABLE) { - io_fflush(orig); + if (io_fflush(orig) < 0) + rb_sys_fail(0); } if (fptr->mode & FMODE_WRITABLE) { - io_fflush(fptr); + if (io_fflush(fptr) < 0) + rb_sys_fail(0); } /* copy rb_io_t structure */ @@ -5310,7 +5321,8 @@ } if (fptr->mode & FMODE_WRITABLE) { - io_fflush(fptr); + if (io_fflush(fptr) < 0) + rb_sys_fail(0); } fptr->rbuf_off = fptr->rbuf_len = 0; @@ -7707,8 +7719,10 @@ str = rb_str_buf_new(len); rb_str_resize(str,len); read_buffered_data(RSTRING_PTR(str), len, src_fptr); - if (dst_fptr) /* IO or filename */ - io_binwrite(str, dst_fptr, 0); + if (dst_fptr) { /* IO or filename */ + if (io_binwrite(str, dst_fptr, 0) < 0) + rb_sys_fail(0); + } else /* others such as StringIO */ rb_io_write(stp->dst, str); stp->total += len; Index: ruby_1_9_1/test/ruby/test_io.rb =================================================================== --- ruby_1_9_1/test/ruby/test_io.rb (revision 21039) +++ ruby_1_9_1/test/ruby/test_io.rb (revision 21040) @@ -1221,13 +1221,13 @@ def test_initialize t = make_tempfile - fd = IO.sysopen(t.path) + fd = IO.sysopen(t.path, "w") assert_kind_of(Integer, fd) f = IO.new(fd, "w") f.write("FOO\n") f.close - assert_equal("foo\nbar\nbaz\n", File.read(t.path)) + assert_equal("FOO\n", File.read(t.path)) f = open(t.path) assert_raise(RuntimeError) do -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/