summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-02-02 04:49:13 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-02-02 04:49:13 +0000
commitde0e5e35ae39a03879d8a954dd6b75654c173cd7 (patch)
tree6f936b0ed7666e5b4c7009c039775bed1a4e9f32 /io.c
parent3293a425afd07c4b004e06e14f1735ca841c1411 (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.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/io.c b/io.c
index 0975ab8f11..5b10bb6091 100644
--- a/io.c
+++ b/io.c
@@ -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);