ruby-changes:7756
From: akr <ko1@a...>
Date: Wed, 10 Sep 2008 01:18:44 +0900 (JST)
Subject: [ruby-changes:7756] Ruby:r19277 (trunk): * transcode.c (get_replacement_character): don't return ASCII
akr 2008-09-10 01:18:29 +0900 (Wed, 10 Sep 2008) New Revision: 19277 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19277 Log: * transcode.c (get_replacement_character): don't return ASCII incompatible replacements. (make_replacement): don't convert the result of get_replacement_character. Modified files: trunk/ChangeLog trunk/transcode.c Index: ChangeLog =================================================================== --- ChangeLog (revision 19276) +++ ChangeLog (revision 19277) @@ -1,3 +1,10 @@ +Wed Sep 10 01:16:07 2008 Tanaka Akira <akr@f...> + + * transcode.c (get_replacement_character): don't return ASCII + incompatible replacements. + (make_replacement): don't convert the result of + get_replacement_character. + Wed Sep 10 01:05:00 2008 Tanaka Akira <akr@f...> * enc/trans/newline.trans (rb_universal_newline): swap src_encoding Index: transcode.c =================================================================== --- transcode.c (revision 19276) +++ transcode.c (revision 19277) @@ -372,44 +372,16 @@ } static const char* -get_replacement_character(rb_encoding *enc, size_t *len_ret, const char **repl_enc_ptr) +get_replacement_character(const char *encname, size_t *len_ret, const char **repl_encname_ptr) { - static rb_encoding *utf16be_encoding, *utf16le_encoding; - static rb_encoding *utf32be_encoding, *utf32le_encoding; - if (!utf16be_encoding) { - utf16be_encoding = rb_enc_find("UTF-16BE"); - utf16le_encoding = rb_enc_find("UTF-16LE"); - utf32be_encoding = rb_enc_find("UTF-32BE"); - utf32le_encoding = rb_enc_find("UTF-32LE"); - } - if (rb_utf8_encoding() == enc) { + if (encoding_equal(encname, "UTF-8")) { *len_ret = 3; - *repl_enc_ptr = "UTF-8"; + *repl_encname_ptr = "UTF-8"; return "\xEF\xBF\xBD"; } - else if (utf16be_encoding == enc) { - *len_ret = 2; - *repl_enc_ptr = "UTF-16BE"; - return "\xFF\xFD"; - } - else if (utf16le_encoding == enc) { - *len_ret = 2; - *repl_enc_ptr = "UTF-16LE"; - return "\xFD\xFF"; - } - else if (utf32be_encoding == enc) { - *len_ret = 4; - *repl_enc_ptr = "UTF-32BE"; - return "\x00\x00\xFF\xFD"; - } - else if (utf32le_encoding == enc) { - *len_ret = 4; - *repl_enc_ptr = "UTF-32LE"; - return "\xFD\xFF\x00\x00"; - } else { *len_ret = 1; - *repl_enc_ptr = "US-ASCII"; + *repl_encname_ptr = "US-ASCII"; return "?"; } } @@ -2034,16 +2006,17 @@ const char *repl_enc; const char *ins_enc; size_t len; - int allocated = 0; if (ec->replacement_str) return 0; + ins_enc = rb_econv_encoding_to_insert_output(ec); + tc = ec->last_tc; - if (tc) { + if (*ins_enc) { tr = tc->transcoder; enc = rb_enc_find(tr->dst_encoding); - replacement = (const unsigned char *)get_replacement_character(enc, &len, &repl_enc); + replacement = (const unsigned char *)get_replacement_character(ins_enc, &len, &repl_enc); } else { replacement = (unsigned char *)"?"; @@ -2051,18 +2024,10 @@ repl_enc = ""; } - ins_enc = rb_econv_encoding_to_insert_output(ec); - if (*repl_enc && !encoding_equal(repl_enc, ins_enc)) { - replacement = allocate_converted_string(repl_enc, ins_enc, replacement, len, NULL, 0, &len); - if (!replacement) - return -1; - allocated = 1; - repl_enc = ins_enc; - } ec->replacement_str = replacement; ec->replacement_len = len; ec->replacement_enc = repl_enc; - ec->replacement_allocated = allocated; + ec->replacement_allocated = 0; return 0; } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/