summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--io.c17
2 files changed, 12 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 0a067b6d0..76b4c8a18 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Tue Aug 26 03:06:48 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (make_writeconv): copy invalid/undef flags.
+
Tue Aug 26 02:47:08 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
* common.mk (dist): tool/make-snapshot is executable.
diff --git a/io.c b/io.c
index 5a33c2543..827c5b0ee 100644
--- a/io.c
+++ b/io.c
@@ -696,21 +696,24 @@ make_writeconv(rb_io_t *fptr)
fptr->writeconv_initialized = 1;
- rb_econv_opts(Qnil, &fptr->writeconv_pre_opts);
-
+ /* ECONV_INVALID_XXX and ECONV_UNDEF_XXX should be set both.
+ * But ECONV_CRLF_NEWLINE_ENCODER should be set only for the first. */
+ fptr->writeconv_pre_opts = fptr->encs.opts;
ecopts = fptr->encs.opts;
#ifdef TEXTMODE_NEWLINE_ENCODER
- if (NEED_NEWLINE_ENCODER(fptr))
- ecopts.flags |= TEXTMODE_NEWLINE_ENCODER;
-
if (!fptr->encs.enc) {
+ if (NEED_NEWLINE_ENCODER(fptr))
+ ecopts.flags |= TEXTMODE_NEWLINE_ENCODER;
fptr->writeconv = rb_econv_open("", "", &ecopts);
if (!fptr->writeconv)
rb_exc_raise(rb_econv_open_exc("", "", &ecopts));
fptr->writeconv_stateless = Qnil;
return;
}
+
+ if (NEED_NEWLINE_ENCODER(fptr))
+ fptr->writeconv_pre_opts.flags |= TEXTMODE_NEWLINE_ENCODER;
#endif
enc = fptr->encs.enc2 ? fptr->encs.enc2 : fptr->encs.enc;
@@ -726,10 +729,6 @@ make_writeconv(rb_io_t *fptr)
denc = NULL;
fptr->writeconv_stateless = Qnil;
fptr->writeconv = NULL;
-#ifdef TEXTMODE_NEWLINE_ENCODER
- if (NEED_NEWLINE_ENCODER(fptr))
- fptr->writeconv_pre_opts.flags |= TEXTMODE_NEWLINE_ENCODER;
-#endif
}
}
}