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

ruby-changes:9451

From: akr <ko1@a...>
Date: Thu, 25 Dec 2008 16:25:22 +0900 (JST)
Subject: [ruby-changes:9451] Ruby:r20989 (trunk): * io.c (flush_before_seek): check io_fflush result.

akr	2008-12-25 16:25:06 +0900 (Thu, 25 Dec 2008)

  New Revision: 20989

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=20989

  Log:
    * 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:
    trunk/ChangeLog
    trunk/io.c
    trunk/test/ruby/test_io.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 20988)
+++ ChangeLog	(revision 20989)
@@ -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: io.c
===================================================================
--- io.c	(revision 20988)
+++ io.c	(revision 20989)
@@ -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);
@@ -1466,7 +1471,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;
@@ -1907,7 +1913,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));
@@ -3075,7 +3082,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;
@@ -3123,7 +3131,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) {
@@ -5224,10 +5233,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 */
@@ -5340,7 +5351,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;
 
@@ -7768,8 +7780,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: test/ruby/test_io.rb
===================================================================
--- test/ruby/test_io.rb	(revision 20988)
+++ test/ruby/test_io.rb	(revision 20989)
@@ -1249,13 +1249,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/

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