summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-25 17:45:30 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-25 17:45:30 +0000
commit75b2d7cbe8538c9414f579c3c56becf9b63986b6 (patch)
tree587648c2930f02467756fd26c91ad1a6f0f0320b /io.c
parent08911df3117cb9cf6625117c1c6a109cff64b1ad (diff)
* include/ruby/io.h (rb_io_t): new field: writeconv_pre_opts.
* io.c (make_writeconv): initialize writeconv_pre_opts. (io_fwrite): use writeconv_pre_opts. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18856 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r--io.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/io.c b/io.c
index d1d350e10e..5a33c25431 100644
--- a/io.c
+++ b/io.c
@@ -696,6 +696,8 @@ make_writeconv(rb_io_t *fptr)
fptr->writeconv_initialized = 1;
+ rb_econv_opts(Qnil, &fptr->writeconv_pre_opts);
+
ecopts = fptr->encs.opts;
#ifdef TEXTMODE_NEWLINE_ENCODER
@@ -716,18 +718,18 @@ make_writeconv(rb_io_t *fptr)
if (senc) {
denc = enc->name;
fptr->writeconv_stateless = rb_str_new2(senc);
- }
- else {
- denc = NULL;
- fptr->writeconv_stateless = Qnil;
- }
- if (senc) {
fptr->writeconv = rb_econv_open(senc, denc, &ecopts);
if (!fptr->writeconv)
rb_exc_raise(rb_econv_open_exc(senc, denc, &ecopts));
}
else {
+ 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
}
}
}
@@ -754,12 +756,7 @@ io_fwrite(VALUE str, rb_io_t *fptr)
}
if (!NIL_P(common_encoding)) {
- rb_econv_option_t ecopts = fptr->encs.opts;
-#ifdef TEXTMODE_NEWLINE_ENCODER
- if (NEED_NEWLINE_ENCODER(fptr))
- ecopts.flags |= TEXTMODE_NEWLINE_ENCODER;
-#endif
- str = rb_str_transcode(str, common_encoding, &ecopts);
+ str = rb_str_transcode(str, common_encoding, &fptr->writeconv_pre_opts);
}
if (fptr->writeconv) {