* 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
This commit is contained in:
nobu 2010-11-11 12:52:18 +00:00
parent 994876860b
commit b3dcfcf22b
2 changed files with 28 additions and 1 deletions

View File

@ -1,3 +1,7 @@
Thu Nov 11 21:52:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* io.c (argf_read_nonblock): add ARGF.read_nonblock.
Thu Nov 11 21:49:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org> Thu Nov 11 21:49:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* lib/rdoc/stats.rb (RDoc#print): get rid of NaN. * lib/rdoc/stats.rb (RDoc#print): get rid of NaN.

25
io.c
View File

@ -9101,6 +9101,8 @@ argf_forward_call(VALUE arg)
return Qnil; return Qnil;
} }
static VALUE argf_getpartial(int argc, VALUE *argv, VALUE argf, int nonblock);
/* /*
* call-seq: * call-seq:
* ARGF.readpartial(maxlen) -> string * ARGF.readpartial(maxlen) -> string
@ -9131,6 +9133,26 @@ argf_forward_call(VALUE arg)
static VALUE static VALUE
argf_readpartial(int argc, VALUE *argv, VALUE argf) 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; VALUE tmp, str, length;
@ -9153,7 +9175,7 @@ argf_readpartial(int argc, VALUE *argv, VALUE argf)
RUBY_METHOD_FUNC(0), Qnil, rb_eEOFError, (VALUE)0); RUBY_METHOD_FUNC(0), Qnil, rb_eEOFError, (VALUE)0);
} }
else { else {
tmp = io_getpartial(argc, argv, ARGF.current_file, 0); tmp = io_getpartial(argc, argv, ARGF.current_file, nonblock);
} }
if (NIL_P(tmp)) { if (NIL_P(tmp)) {
if (ARGF.next_p == -1) { 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, "read", argf_read, -1);
rb_define_method(rb_cARGF, "readpartial", argf_readpartial, -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, "readlines", argf_readlines, -1);
rb_define_method(rb_cARGF, "to_a", argf_readlines, -1); rb_define_method(rb_cARGF, "to_a", argf_readlines, -1);
rb_define_method(rb_cARGF, "gets", argf_gets, -1); rb_define_method(rb_cARGF, "gets", argf_gets, -1);