summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-03-04 05:36:08 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-03-04 05:36:08 +0000
commit70b55c5dcfb237ebab92523bba66cd4c3a25f944 (patch)
treef5c64bc7b2dfa6a6997e39401a5d59ad55a1d887 /io.c
parent8e1d6b214a696333290df5d54dcc9a472d4b2df6 (diff)
* 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.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/io.c b/io.c
index f6e8bfb5ce..f7aec96660 100644
--- a/io.c
+++ b/io.c
@@ -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");
}