diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-17 12:54:26 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-17 12:54:26 +0000 |
commit | 0ff4061ef7e3a8ffa681698fa8490740616d1aac (patch) | |
tree | bc0a4013717fed66329c7ca7ec965812acac0b11 /io.c | |
parent | 59491ed3b06481a3991aca84aebb5e55e5a12edd (diff) | |
download | ruby-0ff4061ef7e3a8ffa681698fa8490740616d1aac.tar.gz |
* io.c (prepare_getline_args): io.gets(10,nil) should cause TypeError.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18675 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 34 |
1 files changed, 14 insertions, 20 deletions
@@ -1889,29 +1889,23 @@ rb_io_getline_fast(rb_io_t *fptr, rb_encoding *enc) static void prepare_getline_args(int argc, VALUE *argv, VALUE *rsp, long *limit, VALUE io) { - VALUE lim, rs; + VALUE rs = rb_rs, lim = Qnil; rb_io_t *fptr; - if (argc == 0) { - rs = rb_rs; - lim = Qnil; - } - else { - rb_scan_args(argc, argv, "11", &rs, &lim); - if (!NIL_P(lim)) { - StringValue(rs); - } - else if (!NIL_P(rs) && TYPE(rs) != T_STRING) { - VALUE tmp = rb_check_string_type(rs); + if (argc == 1) { + VALUE tmp = Qnil; - if (NIL_P(tmp)) { - lim = rs; - rs = rb_rs; - } - else { - rs = tmp; - } - } + if (NIL_P(argv[0]) || !NIL_P(tmp = rb_check_string_type(argv[0]))) { + rs = tmp; + } + else { + lim = argv[0]; + } + } + else if (2 <= argc) { + rb_scan_args(argc, argv, "2", &rs, &lim); + if (!NIL_P(rs)) + StringValue(rs); } if (!NIL_P(rs)) { rb_encoding *enc_rs, *enc_io; |