summaryrefslogtreecommitdiff
path: root/transcode.c
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-12-25 09:58:27 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-12-25 09:58:27 +0000
commit32b66dcf9070f0a07e5a19c8046c1026d65bfc2e (patch)
tree2d0753389ad1e48c5092ee92f662d9c7afca5311 /transcode.c
parent096d5338bdc7d412538d4a6f2e3847ec2c36a062 (diff)
merges r20991 from trunk into ruby_1_9_1.
* transcode.c (decorate_convpath): show type of escaping for xml_attr_quote or some conversions. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21042 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'transcode.c')
-rw-r--r--transcode.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/transcode.c b/transcode.c
index f40666535b..7b8c6dbd58 100644
--- a/transcode.c
+++ b/transcode.c
@@ -2772,17 +2772,22 @@ decorate_convpath(VALUE convpath, int ecflags)
len = n = RARRAY_LEN(convpath);
if (n != 0) {
VALUE pair = RARRAY_PTR(convpath)[n-1];
- const char *sname = rb_enc_name(rb_to_encoding(RARRAY_PTR(pair)[0]));
- const char *dname = rb_enc_name(rb_to_encoding(RARRAY_PTR(pair)[1]));
- transcoder_entry_t *entry = get_transcoder_entry(sname, dname);
- const rb_transcoder *tr = load_transcoder_entry(entry);
- if (!tr)
- return -1;
- if (!DECORATOR_P(tr->src_encoding, tr->dst_encoding) &&
- tr->asciicompat_type == asciicompat_encoder) {
- n--;
- rb_ary_store(convpath, len + num_decorators - 1, pair);
- }
+ if (TYPE(pair) == T_ARRAY) {
+ const char *sname = rb_enc_name(rb_to_encoding(RARRAY_PTR(pair)[0]));
+ const char *dname = rb_enc_name(rb_to_encoding(RARRAY_PTR(pair)[1]));
+ transcoder_entry_t *entry = get_transcoder_entry(sname, dname);
+ const rb_transcoder *tr = load_transcoder_entry(entry);
+ if (!tr)
+ return -1;
+ if (!DECORATOR_P(tr->src_encoding, tr->dst_encoding) &&
+ tr->asciicompat_type == asciicompat_encoder) {
+ n--;
+ rb_ary_store(convpath, len + num_decorators - 1, pair);
+ }
+ }
+ else {
+ rb_ary_store(convpath, len + num_decorators - 1, pair);
+ }
}
for (i = 0; i < num_decorators; i++)