diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-06-23 06:52:39 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-06-23 06:52:39 +0000 |
commit | 67dcad92b7fb9f8b95c8e4925061527fc8a8db3d (patch) | |
tree | 5b3dd49b72fbb459deeab5e049f85f5718eafd8e /io.c | |
parent | eb050525c069ae82473a63fa0788acd5ceb7e04c (diff) |
* string.c (rb_str_upto): generate sequence according to "succ"
order. formerly check was done by dictionary order.
[ruby-talk:74138]
* string.c (rb_string_value): fill constant empty string along
with setting ELTS_SHARED if str->ptr is NULL. [ruby-core:01179]
* string.c (rb_string_value_ptr): ditto.
* string.c (rb_check_string_type): ditto.
* string.c (str_gsub): move END(0) check before mbclen2().
* string.c (scan_once): reduce END(0) check.
* io.c (rb_io_initialize): accept fixnum mode.
* eval.c (error_print): replace strchr() by memchr(), einfo may
contain "\0".
* pack.c (pack_unpack): range check for "@" move; initialize check
for "m".
* error.c (syserr_initialize): avoid buffer overflow.
* file.c (rb_file_s_readlink): expand buffer until readlink
succeed.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3982 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 20 |
1 files changed, 16 insertions, 4 deletions
@@ -2231,7 +2231,13 @@ rb_open_file(argc, argv, io) path = RSTRING(fname)->ptr; if (FIXNUM_P(vmode) || !NIL_P(perm)) { - flags = FIXNUM_P(vmode) ? NUM2INT(vmode) : rb_io_mode_modenum(StringValuePtr(vmode)); + if (FIXNUM_P(vmode)) { + flags = NUM2INT(vmode); + } + else { + SafeStringValue(vmode); + rb_io_mode_modenum(RSTRING(vmode)->ptr); + } fmode = NIL_P(perm) ? 0666 : NUM2INT(perm); rb_file_sysopen_internal(io, path, flags, fmode); @@ -2272,7 +2278,8 @@ rb_io_s_sysopen(argc, argv) if (NIL_P(vmode)) flags = O_RDONLY; else if (FIXNUM_P(vmode)) flags = NUM2INT(vmode); else { - flags = rb_io_mode_modenum(StringValuePtr(vmode)); + SafeStringValue(vmode); + flags = rb_io_mode_modenum(RSTRING(vmode)->ptr); } if (NIL_P(perm)) fmode = 0666; else fmode = NUM2INT(perm); @@ -2833,8 +2840,13 @@ rb_io_initialize(argc, argv, io) rb_scan_args(argc, argv, "11", &fnum, &mode); fd = NUM2INT(fnum); if (argc == 2) { - SafeStringValue(mode); - flags = rb_io_mode_modenum(RSTRING(mode)->ptr); + if (FIXNUM_P(mode)) { + flags = FIX2LONG(mode); + } + else { + SafeStringValue(mode); + flags = rb_io_mode_modenum(RSTRING(mode)->ptr); + } } else { #if defined(HAVE_FCNTL) && defined(F_GETFL) |