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/