diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-21 18:03:52 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-21 18:03:52 +0000 |
commit | fbc6ea6c95f8f8fd2d6f3e6adb49f13c7031860b (patch) | |
tree | 7eea59f0bff7d5cfce8e74bb07b665dc5229b7a3 /io.c | |
parent | ddda4e5508e962a4823722f1f373894280fa529c (diff) | |
download | ruby-fbc6ea6c95f8f8fd2d6f3e6adb49f13c7031860b.tar.gz |
* io.c (rb_io_s_sysopen): mode can be a Bignum.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18761 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 13 |
1 files changed, 8 insertions, 5 deletions
@@ -4624,25 +4624,28 @@ static VALUE rb_io_s_sysopen(int argc, VALUE *argv) { VALUE fname, vmode, vperm; - int flags, fd; + VALUE intmode; + int modenum, fd; mode_t perm; char *path; rb_scan_args(argc, argv, "12", &fname, &vmode, &vperm); FilePathValue(fname); - if (NIL_P(vmode)) flags = O_RDONLY; - else if (FIXNUM_P(vmode)) flags = FIX2INT(vmode); + if (NIL_P(vmode)) + modenum = O_RDONLY; + else if (!NIL_P(intmode = rb_check_to_integer(vmode, "to_int"))) + modenum = NUM2INT(intmode); else { SafeStringValue(vmode); - flags = rb_io_mode_modenum(StringValueCStr(vmode)); + modenum = rb_io_mode_modenum(StringValueCStr(vmode)); } if (NIL_P(vperm)) perm = 0666; else perm = NUM2UINT(vperm); RB_GC_GUARD(fname) = rb_str_new4(fname); path = RSTRING_PTR(fname); - fd = rb_sysopen(path, flags, perm); + fd = rb_sysopen(path, modenum, perm); return INT2NUM(fd); } |