diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-03-04 05:36:08 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-03-04 05:36:08 +0000 |
commit | 70b55c5dcfb237ebab92523bba66cd4c3a25f944 (patch) | |
tree | f5c64bc7b2dfa6a6997e39401a5d59ad55a1d887 /io.c | |
parent | 8e1d6b214a696333290df5d54dcc9a472d4b2df6 (diff) | |
download | ruby-70b55c5dcfb237ebab92523bba66cd4c3a25f944.tar.gz |
* 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
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 23 |
1 files changed, 20 insertions, 3 deletions
@@ -4093,6 +4093,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) { rb_io_t *fptr, *orig; @@ -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"); } |