1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/stringio/stringio.c (strio_getline): check whether str is

a string when str and lim are given.
  https://twitter.com/watson1978/status/56225052152168449

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31248 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
naruse 2011-04-08 07:50:49 +00:00
parent 4ca9e7d03a
commit 653b4248a3
3 changed files with 22 additions and 12 deletions

View file

@ -1,3 +1,9 @@
Fri Apr 8 16:01:56 2011 NARUSE, Yui <naruse@ruby-lang.org>
* ext/stringio/stringio.c (strio_getline): check whether str is
a string when str and lim are given.
https://twitter.com/watson1978/status/56225052152168449
Thu Apr 7 20:03:52 2011 Tanaka Akira <akr@fsij.org>
* include/ruby/io.h: parenthesize macro arguments.

View file

@ -921,18 +921,17 @@ strio_getline(int argc, VALUE *argv, struct StringIO *ptr)
{
const char *s, *e, *p;
long n, limit = 0;
VALUE str;
VALUE str, lim;
if (argc == 0) {
rb_scan_args(argc, argv, "02", &str, &lim);
switch (argc) {
case 0:
str = rb_rs;
}
else {
VALUE lim, tmp;
break;
rb_scan_args(argc, argv, "11", &str, &lim);
if (!NIL_P(lim)) limit = NUM2LONG(lim);
else if (!NIL_P(str) && TYPE(str) != T_STRING) {
tmp = rb_check_string_type(str);
case 1:
if (!NIL_P(str) && TYPE(str) != T_STRING) {
VALUE tmp = rb_check_string_type(str);
if (NIL_P(tmp)) {
limit = NUM2LONG(str);
if (limit == 0) return rb_str_new(0,0);
@ -942,9 +941,12 @@ strio_getline(int argc, VALUE *argv, struct StringIO *ptr)
str = tmp;
}
}
else if (!NIL_P(str)) {
StringValue(str);
}
break;
case 2:
if (!NIL_P(str)) StringValue(str);
limit = NUM2LONG(lim);
break;
}
if (ptr->pos >= (n = RSTRING_LEN(ptr->string))) {

View file

@ -51,6 +51,8 @@ class TestStringIO < Test::Unit::TestCase
assert_equal("abc\n", StringIO.new("abc\n\ndef\n").gets)
assert_equal("abc\n\ndef\n", StringIO.new("abc\n\ndef\n").gets(nil))
assert_equal("abc\n\n", StringIO.new("abc\n\ndef\n").gets(""))
assert_raise(TypeError){StringIO.new("").gets(1, 1)}
assert_raise(TypeError){StringIO.new("").gets(nil, nil)}
end
def test_readlines