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

ruby-changes:6984

From: akr <ko1@a...>
Date: Tue, 12 Aug 2008 07:23:10 +0900 (JST)
Subject: [ruby-changes:6984] Ruby:r18502 (trunk): * transcode.c (get_replacement_character): extracted from

akr	2008-08-12 07:21:15 +0900 (Tue, 12 Aug 2008)

  New Revision: 18502

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

  Log:
    * transcode.c (get_replacement_character): extracted from
      output_replacement_character.

  Modified files:
    trunk/ChangeLog
    trunk/transcode.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 18501)
+++ ChangeLog	(revision 18502)
@@ -1,3 +1,8 @@
+Tue Aug 12 07:19:24 2008  Tanaka Akira  <akr@f...>
+
+	* transcode.c (get_replacement_character): extracted from
+	  output_replacement_character.
+
 Tue Aug 12 07:00:02 2008  Tanaka Akira  <akr@f...>
 
 	* transcode_data.h (rb_transcoder): typedef at first.
Index: transcode.c
===================================================================
--- transcode.c	(revision 18501)
+++ transcode.c	(revision 18502)
@@ -255,10 +255,9 @@
     return NULL;
 }
 
-static void
-output_replacement_character(unsigned char **out_pp, rb_encoding *enc)
+static const char*
+get_replacement_character(rb_encoding *enc, int *len_ret)
 {
-    unsigned char *out_p = *out_pp;
     static rb_encoding *utf16be_encoding, *utf16le_encoding;
     static rb_encoding *utf32be_encoding, *utf32le_encoding;
     if (!utf16be_encoding) {
@@ -268,34 +267,41 @@
 	utf32le_encoding = rb_enc_find("UTF-32LE");
     }
     if (rb_utf8_encoding() == enc) {
-	*out_p++ = 0xEF;
-	*out_p++ = 0xBF;
-	*out_p++ = 0xBD;
+        *len_ret = 3;
+        return "\xEF\xBF\xBD";
     }
     else if (utf16be_encoding == enc) {
-	*out_p++ = 0xFF;
-	*out_p++ = 0xFD;
+        *len_ret = 2;
+        return "\xFF\xFD";
     }
     else if (utf16le_encoding == enc) {
-	*out_p++ = 0xFD;
-	*out_p++ = 0xFF;
+        *len_ret = 2;
+        return "\xFD\xFF";
     }
     else if (utf32be_encoding == enc) {
-	*out_p++ = 0x00;
-	*out_p++ = 0x00;
-	*out_p++ = 0xFF;
-	*out_p++ = 0xFD;
+        *len_ret = 4;
+        return "\x00\x00\xFF\xFD";
     }
     else if (utf32le_encoding == enc) {
-	*out_p++ = 0xFD;
-	*out_p++ = 0xFF;
-	*out_p++ = 0x00;
-	*out_p++ = 0x00;
+        *len_ret = 4;
+        return "\xFD\xFF\x00\x00";
     }
     else {
-	*out_p++ = '?';
+        *len_ret = 1;
+        return "?";
     }
-    *out_pp = out_p;
+}
+
+static void
+output_replacement_character(unsigned char **out_pp, rb_encoding *enc)
+{
+    const char *replacement;
+    int len;
+    replacement = get_replacement_character(enc, &len);
+
+    memcpy(*out_pp, replacement, len);
+
+    *out_pp += len;
     return;
 }
 

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

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