[前][次][番号順一覧][スレッド一覧]

ruby-changes:7173

From: akr <ko1@a...>
Date: Mon, 18 Aug 2008 22:36:14 +0900 (JST)
Subject: [ruby-changes:7173] Ruby:r18692 (trunk): * io.c (make_writeconv): if enc and enc2 is set, convert

akr	2008-08-18 22:35:55 +0900 (Mon, 18 Aug 2008)

  New Revision: 18692

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18692

  Log:
    * io.c (make_writeconv): if enc and enc2 is set, convert
      string.encoding to enc2.
    
    * include/ruby/io.h: comment changed.

  Modified files:
    trunk/ChangeLog
    trunk/include/ruby/io.h
    trunk/io.c

Index: include/ruby/io.h
===================================================================
--- include/ruby/io.h	(revision 18691)
+++ include/ruby/io.h	(revision 18692)
@@ -53,7 +53,7 @@
      * enc  enc2 read action                      write action
      * NULL NULL force_encoding(default_external) write the byte sequence of str
      * e1   NULL force_encoding(e1)               convert str.encoding to e1
-     * e1   e2   convert from e2 to e1            convert from e1 to e2
+     * e1   e2   convert from e2 to e1            convert str.encoding to e2
      */
     rb_encoding *enc;
     rb_encoding *enc2;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 18691)
+++ ChangeLog	(revision 18692)
@@ -1,3 +1,10 @@
+Mon Aug 18 22:30:07 2008  Tanaka Akira  <akr@f...>
+
+	* io.c (make_writeconv): if enc and enc2 is set, convert
+	  string.encoding to enc2.
+
+	* include/ruby/io.h: comment changed.
+
 Mon Aug 18 21:02:08 2008  Tanaka Akira  <akr@f...>
 
 	* include/ruby/io.h (rb_io_t): new fields: writeconv,
Index: io.c
===================================================================
--- io.c	(revision 18691)
+++ io.c	(revision 18692)
@@ -694,20 +694,17 @@
 {
     if (!fptr->writeconv_initialized) {
         const char *senc, *denc;
-        fptr->writeconv_stateless = Qnil;
-        if (fptr->enc2) {
-            senc = fptr->enc->name;
-            denc = fptr->enc2->name;
+        rb_encoding *enc;
+
+        enc = fptr->enc2 ? fptr->enc2 : fptr->enc;
+        senc = rb_econv_stateless_encoding(enc->name);
+        if (senc) {
+            denc = enc->name;
+            fptr->writeconv_stateless = rb_str_new2(senc);
         }
         else {
-            senc = rb_econv_stateless_encoding(fptr->enc->name);
-            if (senc) {
-                denc = fptr->enc->name;
-                fptr->writeconv_stateless = rb_str_new2(senc);
-            }
-            else {
-                denc = NULL;
-            }
+            denc = NULL;
+            fptr->writeconv_stateless = Qnil;
         }
         if (senc) {
             fptr->writeconv = rb_econv_open(senc, denc, 0);
@@ -730,22 +727,19 @@
     /*
      * If an external encoding was specified and it differs from
      * the strings encoding then we must transcode before writing.
-     * We must also transcode if two encodings were specified
      */
     if (fptr->enc) {
         make_writeconv(fptr);
-	if (fptr->enc2) {
+        if (fptr->writeconv) {
+            str = rb_str_transcode(str, fptr->writeconv_stateless);
             str = rb_econv_string(fptr->writeconv, str, 0, RSTRING_LEN(str), Qnil, ECONV_PARTIAL_INPUT);
-	}
-	else {
-            if (fptr->writeconv) {
-                str = rb_str_transcode(str, fptr->writeconv_stateless);
-                str = rb_econv_string(fptr->writeconv, str, 0, RSTRING_LEN(str), Qnil, ECONV_PARTIAL_INPUT);
-            }
-            else {
+        }
+        else {
+            if (fptr->enc2)
+                str = rb_str_transcode(str, rb_enc_from_encoding(fptr->enc2));
+            else
                 str = rb_str_transcode(str, rb_enc_from_encoding(fptr->enc));
-            }
-	}
+        }
     }
 
     len = RSTRING_LEN(str);

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]