From 75b2d7cbe8538c9414f579c3c56becf9b63986b6 Mon Sep 17 00:00:00 2001 From: akr Date: Mon, 25 Aug 2008 17:45:30 +0000 Subject: [PATCH] * 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 --- ChangeLog | 7 +++++++ include/ruby/io.h | 1 + io.c | 21 +++++++++------------ 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 85f1b0bd7b..8292a9550c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Tue Aug 26 02:43:50 2008 Tanaka Akira + + * 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. + Tue Aug 26 01:48:31 2008 Tanaka Akira * io.c: test _WIN32 for CRLF platform. (cygwin defines O_BINARY.) diff --git a/include/ruby/io.h b/include/ruby/io.h index 189a5f211c..6d71edaec4 100644 --- a/include/ruby/io.h +++ b/include/ruby/io.h @@ -69,6 +69,7 @@ typedef struct rb_io_t { rb_econv_t *writeconv; VALUE writeconv_stateless; + rb_econv_option_t writeconv_pre_opts; int writeconv_initialized; } rb_io_t; 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) {