From 70b55c5dcfb237ebab92523bba66cd4c3a25f944 Mon Sep 17 00:00:00 2001 From: naruse Date: Tue, 4 Mar 2008 05:36:08 +0000 Subject: * io.c (open_key_args): use rb_io_open_with_args instead of rb_f_open. [ruby-core:15763] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15685 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- io.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'io.c') diff --git a/io.c b/io.c index f6e8bfb5ce..f7aec96660 100644 --- a/io.c +++ b/io.c @@ -4092,6 +4092,24 @@ rb_io_open(const char *fname, const char *mode) } } +static VALUE +rb_io_open_with_args(int argc, VALUE *argv) +{ + const char *mode; + VALUE pname, pmode; + + if (rb_scan_args(argc, argv, "11", &pname, &pmode) == 1) { + mode = "r"; + } + else if (FIXNUM_P(pmode)) { + mode = rb_io_modenum_mode(FIX2INT(pmode)); + } + else { + mode = StringValueCStr(pmode); + } + return rb_io_open(StringValueCStr(pname), mode); +} + static VALUE io_reopen(VALUE io, VALUE nfile) { @@ -5927,15 +5945,14 @@ open_key_args(int argc, VALUE *argv, struct foreach_arg *arg) rb_ary_concat(args, v); MEMCPY(RARRAY_PTR(args)+1, RARRAY_PTR(v), VALUE, RARRAY_LEN(v)); - arg->io = rb_f_open(RARRAY_LEN(args), RARRAY_PTR(args)); + arg->io = rb_io_open_with_args(RARRAY_LEN(args), RARRAY_PTR(args)); return; } v = rb_hash_aref(opt, mode); if (!NIL_P(v)) { arg->io = rb_io_open(RSTRING_PTR(argv[0]), StringValueCStr(v)); } - - if (!arg->io) { + else { arg->io = rb_io_open(RSTRING_PTR(argv[0]), "r"); } -- cgit v1.2.3