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

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/

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