diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-02-02 04:49:13 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-02-02 04:49:13 +0000 |
commit | de0e5e35ae39a03879d8a954dd6b75654c173cd7 (patch) | |
tree | 6f936b0ed7666e5b4c7009c039775bed1a4e9f32 /io.c | |
parent | 3293a425afd07c4b004e06e14f1735ca841c1411 (diff) |
__FILE__,__LINE__
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@62 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 25 |
1 files changed, 17 insertions, 8 deletions
@@ -1394,18 +1394,27 @@ io_defset(val, id) } static void -io_errset(val, id) +io_stdio_set(val, id, var) VALUE val; ID id; + VALUE *var; { - OpenFile *fptr; + OpenFile *fptr, *fptr2; int fd; - FILE *f; if (TYPE(val) != T_FILE) { - TypeError("$stderr must be IO Object"); + TypeError("%s must be IO object", rb_id2name(id)); + } + GetOpenFile(*var, fptr); + fd = fileno(fptr->f); + GetOpenFile(val, fptr); + if (fd == 0) { + io_readable(fptr); + } + else { + io_writable(fptr); } - io_reopen(rb_stderr, val); + io_reopen(*var, val); } static VALUE @@ -2363,11 +2372,11 @@ Init_IO() rb_define_method(cIO, "fcntl", io_fcntl, -1); rb_stdin = prep_stdio(stdin, FMODE_READABLE); - rb_define_readonly_variable("$stdin", &rb_stdin); + rb_define_hooked_variable("$stdin", &rb_stdin, 0, io_stdio_set); rb_stdout = prep_stdio(stdout, FMODE_WRITABLE); - rb_define_readonly_variable("$stdout", &rb_stdout); + rb_define_hooked_variable("$stdout", &rb_stdout, 0, io_stdio_set); rb_stderr = prep_stdio(stderr, FMODE_WRITABLE); - rb_define_hooked_variable("$stderr", &rb_stderr, 0, io_errset); + rb_define_hooked_variable("$stderr", &rb_stderr, 0, io_stdio_set); rb_defout = rb_stdout; rb_define_hooked_variable("$>", &rb_defout, 0, io_defset); |