diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-05-29 22:49:19 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-05-29 22:49:19 +0000 |
commit | 7ffffab2363364d451952d437ebed2686e51f06a (patch) | |
tree | d812024375ab2e3a964477303e1ecc317bfdab83 /ext | |
parent | 61ce01276dc8b2fe7afa85a8d788f7774a451f0a (diff) |
merges r31248 from trunk into ruby_1_9_2.
--
* 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/branches/ruby_1_9_2@31797 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/stringio/stringio.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/ext/stringio/stringio.c b/ext/stringio/stringio.c index 6ee9599619..3ca5001fe0 100644 --- a/ext/stringio/stringio.c +++ b/ext/stringio/stringio.c @@ -919,18 +919,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); @@ -940,9 +939,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))) { |