From 7e0b2b1d9bb86a7b5c78682ca7c6435614801faa Mon Sep 17 00:00:00 2001 From: akr Date: Wed, 10 Sep 2008 18:00:36 +0000 Subject: * io.c (io_binwrite): extracted from io_fwrite. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19290 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ io.c | 67 +++++++++++++++++++++++++++++++++++---------------------------- 2 files changed, 41 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index 63f7880ff4..cf622b53a8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Thu Sep 11 02:59:47 2008 Tanaka Akira + + * io.c (io_binwrite): extracted from io_fwrite. + Thu Sep 11 02:25:34 2008 Tanaka Akira * transcode.c (make_encoding): new function. diff --git a/io.c b/io.c index a3ca6486b9..2a6b042eaf 100644 --- a/io.c +++ b/io.c @@ -744,40 +744,12 @@ make_writeconv(rb_io_t *fptr) } /* writing functions */ + static long -io_fwrite(VALUE str, rb_io_t *fptr) +io_binwrite(VALUE str, rb_io_t *fptr) { long len, n, r, l, offset = 0; - if (NEED_WRITECONV(fptr)) { - VALUE common_encoding = Qnil; - make_writeconv(fptr); - - if (fptr->writeconv) { - if (!NIL_P(fptr->writeconv_asciicompat)) - common_encoding = fptr->writeconv_asciicompat; - else if (!rb_enc_asciicompat(rb_enc_get(str))) { - rb_raise(rb_eArgError, "ASCII incompatible string written for text mode IO without encoding conversion: %s", - rb_enc_name(rb_enc_get(str))); - } - } - else { - if (fptr->encs.enc2) - common_encoding = rb_enc_from_encoding(fptr->encs.enc2); - else - common_encoding = rb_enc_from_encoding(fptr->encs.enc); - } - - if (!NIL_P(common_encoding)) { - str = rb_str_transcode(str, common_encoding, - fptr->writeconv_pre_ecflags, fptr->writeconv_pre_ecopts); - } - - if (fptr->writeconv) { - str = rb_econv_str_convert(fptr->writeconv, str, ECONV_PARTIAL_INPUT); - } - } - len = RSTRING_LEN(str); if ((n = len) <= 0) return n; if (fptr->wbuf == NULL && !(fptr->mode & FMODE_SYNC)) { @@ -840,6 +812,41 @@ io_fwrite(VALUE str, rb_io_t *fptr) return len; } +static long +io_fwrite(VALUE str, rb_io_t *fptr) +{ + if (NEED_WRITECONV(fptr)) { + VALUE common_encoding = Qnil; + make_writeconv(fptr); + + if (fptr->writeconv) { + if (!NIL_P(fptr->writeconv_asciicompat)) + common_encoding = fptr->writeconv_asciicompat; + else if (!rb_enc_asciicompat(rb_enc_get(str))) { + rb_raise(rb_eArgError, "ASCII incompatible string written for text mode IO without encoding conversion: %s", + rb_enc_name(rb_enc_get(str))); + } + } + else { + if (fptr->encs.enc2) + common_encoding = rb_enc_from_encoding(fptr->encs.enc2); + else + common_encoding = rb_enc_from_encoding(fptr->encs.enc); + } + + if (!NIL_P(common_encoding)) { + str = rb_str_transcode(str, common_encoding, + fptr->writeconv_pre_ecflags, fptr->writeconv_pre_ecopts); + } + + if (fptr->writeconv) { + str = rb_econv_str_convert(fptr->writeconv, str, ECONV_PARTIAL_INPUT); + } + } + + return io_binwrite(str, fptr); +} + long rb_io_fwrite(const char *ptr, long len, FILE *f) { -- cgit v1.2.3