mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* transcode.c (get_replacement_character): don't return ASCII
incompatible replacements. (make_replacement): don't convert the result of get_replacement_character. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19277 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
817a623d13
commit
3cc7c9d0dd
2 changed files with 16 additions and 44 deletions
|
@ -1,3 +1,10 @@
|
|||
Wed Sep 10 01:16:07 2008 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* 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@fsij.org>
|
||||
|
||||
* enc/trans/newline.trans (rb_universal_newline): swap src_encoding
|
||||
|
|
53
transcode.c
53
transcode.c
|
@ -372,44 +372,16 @@ load_transcoder_entry(transcoder_entry_t *entry)
|
|||
}
|
||||
|
||||
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 @@ make_replacement(rb_econv_t *ec)
|
|||
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 @@ make_replacement(rb_econv_t *ec)
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue