mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* io.c, rubyio.h (rb_io_modenum_flags): exported.
* ext/stringio/stringio.c (strio_initialize): allow Fixnum as mode as well as IO.new does. [ruby-dev:24896] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7304 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
e766a04a57
commit
27e4aa4a93
4 changed files with 21 additions and 11 deletions
|
@ -1,3 +1,10 @@
|
|||
Thu Nov 18 10:10:14 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* io.c, rubyio.h (rb_io_modenum_flags): exported.
|
||||
|
||||
* ext/stringio/stringio.c (strio_initialize): allow Fixnum as mode as
|
||||
well as IO.new does. [ruby-dev:24896]
|
||||
|
||||
Wed Nov 17 23:47:30 2004 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
|
||||
|
||||
* test/ruby/test_settracefunc.rb: added. [ruby-dev:24884]
|
||||
|
|
|
@ -201,7 +201,7 @@ strio_initialize(argc, argv, self)
|
|||
{
|
||||
struct StringIO *ptr = check_strio(self);
|
||||
VALUE string, mode;
|
||||
const char* m;
|
||||
int trunc = Qfalse;
|
||||
|
||||
if (!ptr) {
|
||||
DATA_PTR(self) = ptr = strio_alloc();
|
||||
|
@ -209,21 +209,23 @@ strio_initialize(argc, argv, self)
|
|||
rb_call_super(0, 0);
|
||||
switch (rb_scan_args(argc, argv, "02", &string, &mode)) {
|
||||
case 2:
|
||||
StringValue(mode);
|
||||
if (FIXNUM_P(mode)) {
|
||||
int flags = FIX2INT(mode);
|
||||
ptr->flags = rb_io_modenum_flags(flags);
|
||||
trunc = flags & O_TRUNC;
|
||||
}
|
||||
else {
|
||||
const char *m = StringValueCStr(mode);
|
||||
ptr->flags = rb_io_mode_flags(m);
|
||||
trunc = *m == 'w';
|
||||
}
|
||||
StringValue(string);
|
||||
if (!(m = RSTRING(mode)->ptr)) m = "";
|
||||
ptr->flags = rb_io_mode_flags(m);
|
||||
if ((ptr->flags & FMODE_WRITABLE) && OBJ_FROZEN(string)) {
|
||||
errno = EACCES;
|
||||
rb_sys_fail(0);
|
||||
}
|
||||
switch (*m) {
|
||||
case 'a':
|
||||
ptr->flags |= FMODE_APPEND;
|
||||
break;
|
||||
case 'w':
|
||||
if (trunc) {
|
||||
rb_str_resize(string, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
|
|
2
io.c
2
io.c
|
@ -2389,7 +2389,7 @@ rb_io_mode_flags(mode)
|
|||
return flags;
|
||||
}
|
||||
|
||||
static int
|
||||
int
|
||||
rb_io_modenum_flags(mode)
|
||||
int mode;
|
||||
{
|
||||
|
|
1
rubyio.h
1
rubyio.h
|
@ -65,6 +65,7 @@ int rb_getc _((FILE*));
|
|||
long rb_io_fread _((char *, long, FILE *));
|
||||
long rb_io_fwrite _((const char *, long, FILE *));
|
||||
int rb_io_mode_flags _((const char*));
|
||||
int rb_io_modenum_flags _((int));
|
||||
void rb_io_check_writable _((OpenFile*));
|
||||
void rb_io_check_readable _((OpenFile*));
|
||||
int rb_io_fptr_finalize _((OpenFile*));
|
||||
|
|
Loading…
Reference in a new issue