[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]