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

ruby-changes:17739

From: nobu <ko1@a...>
Date: Thu, 11 Nov 2010 21:53:40 +0900 (JST)
Subject: [ruby-changes:17739] Ruby:r29751 (trunk): * io.c (argf_read_nonblock): add ARGF.read_nonblock.

nobu	2010-11-11 21:52:18 +0900 (Thu, 11 Nov 2010)

  New Revision: 29751

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

  Log:
    * io.c (argf_read_nonblock): add ARGF.read_nonblock.

  Modified files:
    trunk/ChangeLog
    trunk/io.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29750)
+++ ChangeLog	(revision 29751)
@@ -1,3 +1,7 @@
+Thu Nov 11 21:52:13 2010  Nobuyoshi Nakada  <nobu@r...>
+
+	* io.c (argf_read_nonblock): add ARGF.read_nonblock.
+
 Thu Nov 11 21:49:06 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* lib/rdoc/stats.rb (RDoc#print): get rid of NaN.
Index: io.c
===================================================================
--- io.c	(revision 29750)
+++ io.c	(revision 29751)
@@ -9101,6 +9101,8 @@
     return Qnil;
 }
 
+static VALUE argf_getpartial(int argc, VALUE *argv, VALUE argf, int nonblock);
+
 /*
  *  call-seq:
  *     ARGF.readpartial(maxlen)              -> string
@@ -9132,6 +9134,26 @@
 static VALUE
 argf_readpartial(int argc, VALUE *argv, VALUE argf)
 {
+    return argf_getpartial(argc, argv, argf, 0);
+}
+
+/*
+ *  call-seq:
+ *     ARGF.read_nonblock(maxlen)              -> string
+ *     ARGF.read_nonblock(maxlen, outbuf)      -> outbuf
+ *
+ *  Reads at most _maxlen_ bytes from the ARGF stream in non-blocking mode.
+ */
+
+static VALUE
+argf_read_nonblock(int argc, VALUE *argv, VALUE argf)
+{
+    return argf_getpartial(argc, argv, argf, 1);
+}
+
+static VALUE
+argf_getpartial(int argc, VALUE *argv, VALUE argf, int nonblock)
+{
     VALUE tmp, str, length;
 
     rb_scan_args(argc, argv, "11", &length, &str);
@@ -9153,7 +9175,7 @@
 			 RUBY_METHOD_FUNC(0), Qnil, rb_eEOFError, (VALUE)0);
     }
     else {
-        tmp = io_getpartial(argc, argv, ARGF.current_file, 0);
+        tmp = io_getpartial(argc, argv, ARGF.current_file, nonblock);
     }
     if (NIL_P(tmp)) {
         if (ARGF.next_p == -1) {
@@ -10108,6 +10130,7 @@
 
     rb_define_method(rb_cARGF, "read",  argf_read, -1);
     rb_define_method(rb_cARGF, "readpartial",  argf_readpartial, -1);
+    rb_define_method(rb_cARGF, "read_nonblock",  argf_read_nonblock, -1);
     rb_define_method(rb_cARGF, "readlines", argf_readlines, -1);
     rb_define_method(rb_cARGF, "to_a", argf_readlines, -1);
     rb_define_method(rb_cARGF, "gets", argf_gets, -1);

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

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