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

ruby-changes:11136

From: yugui <ko1@a...>
Date: Tue, 3 Mar 2009 21:13:11 +0900 (JST)
Subject: [ruby-changes:11136] Ruby:r22740 (ruby_1_9_1): merges r22610 from trunk into ruby_1_9_1.

yugui	2009-03-03 20:40:41 +0900 (Tue, 03 Mar 2009)

  New Revision: 22740

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

  Log:
    merges r22610 from trunk into ruby_1_9_1.
    --
    * io.c (rb_io_getline_1): enables limit even if rs is given.
      [ruby-core:22434]

  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 22739)
+++ ruby_1_9_1/ChangeLog	(revision 22740)
@@ -1,3 +1,8 @@
+Wed Feb 25 12:06:09 2009    <nobu@r...>
+
+	* io.c (rb_io_getline_1): enables limit even if rs is given.
+	  [ruby-core:22434]
+
 Wed Feb 25 02:28:51 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* string.c (rb_str_chomp_bang): coderange may change.
Index: ruby_1_9_1/io.c
===================================================================
--- ruby_1_9_1/io.c	(revision 22739)
+++ ruby_1_9_1/io.c	(revision 22740)
@@ -2215,7 +2215,7 @@
 
     GetOpenFile(io, fptr);
     rb_io_check_readable(fptr);
-    if (NIL_P(rs)) {
+    if (NIL_P(rs) && limit < 0) {
 	str = read_all(fptr, 0, Qnil);
 	if (RSTRING_LEN(str) == 0) return Qnil;
     }
@@ -2227,24 +2227,26 @@
 	return rb_io_getline_fast(fptr, enc);
     }
     else {
-	int c, newline;
-	const char *rsptr;
-	long rslen;
+	int c, newline = -1;
+	const char *rsptr = 0;
+	long rslen = 0;
 	int rspara = 0;
         int extra_limit = 16;
 
-	rslen = RSTRING_LEN(rs);
-	if (rslen == 0) {
-	    rsptr = "\n\n";
-	    rslen = 2;
-	    rspara = 1;
-	    swallow(fptr, '\n');
-	    rs = 0;
+	if (!NIL_P(rs)) {
+	    rslen = RSTRING_LEN(rs);
+	    if (rslen == 0) {
+		rsptr = "\n\n";
+		rslen = 2;
+		rspara = 1;
+		swallow(fptr, '\n');
+		rs = 0;
+	    }
+	    else {
+		rsptr = RSTRING_PTR(rs);
+	    }
+	    newline = (unsigned char)rsptr[rslen - 1];
 	}
-	else {
-	    rsptr = RSTRING_PTR(rs);
-	}
-	newline = (unsigned char)rsptr[rslen - 1];
 
 	/* MS - Optimisation */
         enc = io_read_encoding(fptr);
Index: ruby_1_9_1/test/ruby/test_io.rb
===================================================================
--- ruby_1_9_1/test/ruby/test_io.rb	(revision 22739)
+++ ruby_1_9_1/test/ruby/test_io.rb	(revision 22740)
@@ -61,8 +61,9 @@
   def test_gets_limit_extra_arg
     with_pipe {|r, w|
       r, w = IO.pipe
-      w << "0123456789"
+      w << "0123456789\n0123456789"
       w.close
+      assert_equal("0123456789\n0", r.gets(nil, 12))
       assert_raise(TypeError) { r.gets(3,nil) }
     }
   end

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

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