summaryrefslogtreecommitdiffstats
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
commitaa3f56638e7a9b1b518d6b72bcd5104feb484f98 (patch)
tree2d0753389ad1e48c5092ee92f662d9c7afca5311 /transcode.c
parentdbd5b8c534cda863c62d39858d57f738f4332c52 (diff)
downloadruby-aa3f56638e7a9b1b518d6b72bcd5104feb484f98.tar.gz
ruby-aa3f56638e7a9b1b518d6b72bcd5104feb484f98.tar.xz
ruby-aa3f56638e7a9b1b518d6b72bcd5104feb484f98.zip
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: http://svn.ruby-lang.org/repos/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 f40666535..7b8c6dbd5 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++)