aboutsummaryrefslogtreecommitdiffstats
path: root/transcode.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-11 21:49:38 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-11 21:49:38 +0000
commit425098de96b3b51bdb99090eef39134867ba32ca (patch)
tree968425bf1e5da02ad58faf2997ff2df9381793fc /transcode.c
parent53fddace544b5302237b86ebeee6c1440f42beb5 (diff)
downloadruby-425098de96b3b51bdb99090eef39134867ba32ca.tar.gz
* transcode.c (rb_trans_conv): find second last error.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18500 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'transcode.c')
-rw-r--r--transcode.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/transcode.c b/transcode.c
index b01903cdb5..a733a054ab 100644
--- a/transcode.c
+++ b/transcode.c
@@ -736,7 +736,7 @@ rb_trans_conv(rb_trans_t *ts,
int flags)
{
int i;
- int start, err_index;
+ int start, err_index, no_error;
unsigned char empty_buf;
unsigned char *empty_ptr = &empty_buf;
@@ -751,12 +751,20 @@ rb_trans_conv(rb_trans_t *ts,
output_stop = empty_ptr;
}
+ no_error = 1;
err_index = -1;
- for (i = ts->num_trans-2; 0 <= i; i--) {
+ for (i = ts->num_trans-1; 0 <= i; i--) {
if (ts->elems[i].last_result == transcode_invalid_input ||
ts->elems[i].last_result == transcode_undefined_conversion) {
- err_index = i;
- break;
+ if (no_error) {
+ /* last error */
+ no_error = 0;
+ }
+ else {
+ /* second last error */
+ err_index = i;
+ break;
+ }
}
}