summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-11-11 12:52:18 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-11-11 12:52:18 +0000
commitb3dcfcf22b053fc4b50d417ca98a540ee8908b99 (patch)
treeda6b045919e42759718822db30cb7d49bf399b2d /io.c
parent994876860b4f2a9bf4f22c436527e7220c82d5b4 (diff)
* io.c (argf_read_nonblock): add ARGF.read_nonblock.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29751 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r--io.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/io.c b/io.c
index d2aefcf5e1..a0769184d0 100644
--- a/io.c
+++ b/io.c
@@ -9101,6 +9101,8 @@ argf_forward_call(VALUE arg)
return Qnil;
}
+static VALUE argf_getpartial(int argc, VALUE *argv, VALUE argf, int nonblock);
+
/*
* call-seq:
* ARGF.readpartial(maxlen) -> string
@@ -9132,6 +9134,26 @@ argf_forward_call(VALUE arg)
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 @@ argf_readpartial(int argc, VALUE *argv, VALUE argf)
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 @@ Init_IO(void)
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);