diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 18:08:08 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 18:08:08 +0000 |
commit | 3c66a5b25eeee2a0b1b7768e3155048339ff5be8 (patch) | |
tree | 3d1203725d436dce09014fb19c3af2c70f40148b /io.c | |
parent | 446a67c08e13adc3b110ba67a7714a1cf35bcda7 (diff) | |
download | ruby-3c66a5b25eeee2a0b1b7768e3155048339ff5be8.tar.gz |
* io.c (make_writeconv): copy invalid/undef flags.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18859 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 17 |
1 files changed, 8 insertions, 9 deletions
@@ -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 } } } |