summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-05-29 22:49:19 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-05-29 22:49:19 +0000
commit7ffffab2363364d451952d437ebed2686e51f06a (patch)
treed812024375ab2e3a964477303e1ecc317bfdab83 /ext
parent61ce01276dc8b2fe7afa85a8d788f7774a451f0a (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.c26
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))) {