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

ruby-changes:10165

From: nobu <ko1@a...>
Date: Wed, 21 Jan 2009 13:56:24 +0900 (JST)
Subject: [ruby-changes:10165] Ruby:r21709 (trunk): * include/ruby/io.h (typedef struct rb_io_t):

nobu	2009-01-21 13:56:06 +0900 (Wed, 21 Jan 2009)

  New Revision: 21709

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

  Log:
    * include/ruby/io.h (typedef struct rb_io_t):
    * io.c (flush_before_seek):
    * io.c (io_fillbuf):
    * io.c (io_fread):
    * io.c (io_getpartial):
    * ruby.c (load_file_internal):

  Modified files:
    trunk/ChangeLog
    trunk/include/ruby/io.h
    trunk/io.c

Index: include/ruby/io.h
===================================================================
--- include/ruby/io.h	(revision 21708)
+++ include/ruby/io.h	(revision 21709)
@@ -92,6 +92,7 @@
 #define FMODE_WSPLIT_INITIALIZED    0x00000400
 #define FMODE_TRUNC                 0x00000800
 #define FMODE_TEXTMODE              0x00001000
+#define FMODE_EOF                   0x00002000
 /* #define FMODE_PREP               0x00010000 */
 
 #define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21708)
+++ ChangeLog	(revision 21709)
@@ -1,3 +1,12 @@
+Wed Jan 21 13:57:18 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* include/ruby/io.h (typedef struct rb_io_t):
+	* io.c (flush_before_seek):
+	* io.c (io_fillbuf):
+	* io.c (io_fread):
+	* io.c (io_getpartial):
+	* ruby.c (load_file_internal):
+
 Wed Jan 21 08:22:04 2009  Ryan Davis  <ryand-ruby@z...>
 
 	* lib/minitest/*.rb: Imported minitest 1.3.1 r4532.
Index: io.c
===================================================================
--- io.c	(revision 21708)
+++ io.c	(revision 21709)
@@ -353,7 +353,8 @@
     return fptr;
 }
 
-#define io_seek(fptr, ofs, whence) lseek(flush_before_seek(fptr)->fd, ofs, whence)
+#define io_set_eof(fptr) (void)(((fptr)->mode & FMODE_TTY) && ((fptr)->mode |= FMODE_EOF))
+#define io_seek(fptr, ofs, whence) (fptr->mode &= ~FMODE_EOF, lseek(flush_before_seek(fptr)->fd, ofs, whence))
 #define io_tell(fptr) lseek(flush_before_seek(fptr)->fd, 0, SEEK_CUR)
 
 #ifndef SEEK_CUR
@@ -1147,6 +1148,9 @@
 {
     int r;
 
+    if (fptr->mode & FMODE_EOF) {
+	return -1;
+    }
     if (fptr->rbuf == NULL) {
         fptr->rbuf_off = 0;
         fptr->rbuf_len = 0;
@@ -1165,8 +1169,10 @@
         }
         fptr->rbuf_off = 0;
         fptr->rbuf_len = r;
-        if (r == 0)
+        if (r == 0) {
+	    io_set_eof(fptr);
             return -1; /* EOF */
+	}
     }
     return 0;
 }
@@ -1436,7 +1442,10 @@
     if (READ_DATA_PENDING(fptr) == 0) {
 	while (n > 0) {
 	    c = rb_read_internal(fptr->fd, RSTRING_PTR(str)+offset, n);
-	    if (c == 0) break;
+	    if (c == 0) {
+		io_set_eof(fptr);
+		break;
+	    }
 	    if (c < 0) {
 		rb_sys_fail_path(fptr->pathv);
 	    }
@@ -1743,6 +1752,9 @@
                 goto again;
             rb_sys_fail_path(fptr->pathv);
         }
+	else if (n == 0) {
+	    io_set_eof(fptr);
+	}
     }
     rb_str_resize(str, n);
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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