ruby-changes:17770
From: nobu <ko1@a...>
Date: Sun, 14 Nov 2010 12:05:37 +0900 (JST)
Subject: [ruby-changes:17770] Ruby:r29781 (trunk): * io.c (argf_readlines): forward to current_file for arguments
nobu 2010-11-14 12:05:29 +0900 (Sun, 14 Nov 2010) New Revision: 29781 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29781 Log: * io.c (argf_readlines): forward to current_file for arguments check. http://twitter.com/nagachika/status/3634254856589312 Modified files: trunk/ChangeLog trunk/io.c trunk/test/ruby/test_argf.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 29780) +++ ChangeLog (revision 29781) @@ -1,3 +1,8 @@ +Sun Nov 14 12:05:24 2010 Nobuyoshi Nakada <nobu@r...> + + * io.c (argf_readlines): forward to current_file for arguments + check. http://twitter.com/nagachika/status/3634254856589312 + Sun Nov 14 08:48:06 2010 Nobuyoshi Nakada <nobu@r...> * win32/setup.mak (-basic-vars-, -runtime-): suppress trailing Index: io.c =================================================================== --- io.c (revision 29780) +++ io.c (revision 29781) @@ -7172,13 +7172,23 @@ static VALUE argf_readlines(int argc, VALUE *argv, VALUE argf) { - VALUE line, ary; + int lineno = ARGF.lineno; + VALUE lines, ary; ary = rb_ary_new(); - while (!NIL_P(line = argf_getline(argc, argv, argf))) { - rb_ary_push(ary, line); + while (next_argv()) { + if (ARGF_GENERIC_INPUT_P()) { + lines = rb_funcall3(ARGF.current_file, rb_intern("readlines"), argc, argv); + } + else { + lines = rb_io_readlines(argc, argv, ARGF.current_file); + argf_close(ARGF.current_file); + } + ARGF.next_p = 1; + rb_ary_concat(ary, lines); + ARGF.lineno = lineno + RARRAY_LEN(ary); + ARGF.last_lineno = ARGF.lineno; } - return ary; } Index: test/ruby/test_argf.rb =================================================================== --- test/ruby/test_argf.rb (revision 29780) +++ test/ruby/test_argf.rb (revision 29781) @@ -694,4 +694,22 @@ assert_equal([@t1.path, @t2.path, @t3.path].inspect, f.gets.chomp) end end + + def test_readlines_limit_0 + bug4024 = '[ruby-dev:42538]' + t = make_tempfile + argf = ARGF.class.new(t.path) + assert_raise(ArgumentError, bug4024) do + argf.readlines(0) + end + end + + def test_each_line_limit_0 + bug4024 = '[ruby-dev:42538]' + t = make_tempfile + argf = ARGF.class.new(t.path) + assert_raise(ArgumentError, bug4024) do + argf.each_line(0).next + end + end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/