summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--io.c6
2 files changed, 11 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 037f862ae..b1e80dab4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Dec 25 15:42:49 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_external_encoding): should return nil for
+ pass-through write IO. [ruby-dev:32740]
+
Tue Dec 25 15:24:57 2007 Tanaka Akira <akr@fsij.org>
* io.c (appendline): initialize rslen to 1 if rsptr is 0.
diff --git a/io.c b/io.c
index 9556b98ff..41449beb3 100644
--- a/io.c
+++ b/io.c
@@ -5921,6 +5921,7 @@ rb_io_s_read(int argc, VALUE *argv, VALUE io)
* io.external_encoding => encoding
*
* Returns the Encoding object that represents the encoding of the file.
+ * If io is write mode and no encoding is specified, returns <code>nil</code>.
*/
static VALUE
@@ -5935,6 +5936,11 @@ rb_io_external_encoding(VALUE io)
if (!fptr->enc && fptr->fd == 0) {
fptr->enc = rb_default_external_encoding();
}
+ if (fptr->mode & FMODE_WRITABLE) {
+ if (fptr->enc)
+ return rb_enc_from_encoding(fptr->enc);
+ return Qnil;
+ }
return rb_enc_from_encoding(io_read_encoding(fptr));
}