aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--io.c12
2 files changed, 13 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index e00cebfb91..c0c07dab84 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,6 @@
-Thu Nov 11 21:56:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Nov 11 23:03:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (argf_close): untie tied io before closing.
* io.c (argf_write): add ARGF.write and so on.
diff --git a/io.c b/io.c
index 12c1884660..b668688821 100644
--- a/io.c
+++ b/io.c
@@ -315,10 +315,15 @@ rb_io_set_write_io(VALUE io, VALUE w)
{
VALUE write_io;
rb_io_check_initialized(RFILE(io)->fptr);
- GetWriteIO(w);
+ if (!RTEST(w)) {
+ w = 0;
+ }
+ else {
+ GetWriteIO(w);
+ }
write_io = RFILE(io)->fptr->tied_io_for_writing;
RFILE(io)->fptr->tied_io_for_writing = w;
- return write_io;
+ return write_io ? write_io : Qnil;
}
/*
@@ -6781,6 +6786,9 @@ argf_forward(int argc, VALUE *argv, VALUE argf)
static void
argf_close(VALUE file)
{
+ if (RB_TYPE_P(file, T_FILE)) {
+ rb_io_set_write_io(file, Qnil);
+ }
rb_funcall3(file, rb_intern("close"), 0, 0);
}