diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-02-24 00:47:12 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-02-24 00:47:12 +0000 |
commit | 4c0106ead6ba06487e837f32e3d80ecd8a310032 (patch) | |
tree | 6ed62b336e90bd5ee8bec51ee697bb537145b9f7 /string.c | |
parent | 673af3e9f27ba4282d04855febc3ad7dc7e736eb (diff) | |
download | ruby-4c0106ead6ba06487e837f32e3d80ecd8a310032.tar.gz |
string.c: smart chomp
* string.c (chompped_length): enable smart chomp for all non-dummy
encoding strings, not only default_rs.
[ruby-core:68258] [Bug #10893]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49706 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -7112,9 +7112,9 @@ chompped_length(VALUE str, VALUE rs) if (len == 0) return 0; e = p + len; - enc = rb_enc_get(str); if (rs == rb_default_rs) { smart_chomp: + enc = rb_enc_get(str); if (rb_enc_mbminlen(enc) > 1) { pp = rb_enc_left_char_head(p, e-rb_enc_mbminlen(enc), e, enc); if (rb_enc_is_newline(pp, e, enc)) { @@ -7143,6 +7143,7 @@ chompped_length(VALUE str, VALUE rs) return e - p; } + enc = rb_enc_get(str); RSTRING_GETMEM(rs, rsptr, rslen); if (rslen == 0) { if (rb_enc_mbminlen(enc) > 1) { @@ -7170,10 +7171,7 @@ chompped_length(VALUE str, VALUE rs) } if (rslen > len) return len; - enc = rb_enc_check(str, rs); - if (is_broken_string(rs)) { - return len; - } + enc = rb_enc_get(rs); newline = rsptr[rslen-1]; if (rslen == rb_enc_mbminlen(enc)) { if (rslen == 1) { @@ -7186,6 +7184,10 @@ chompped_length(VALUE str, VALUE rs) } } + enc = rb_enc_check(str, rs); + if (is_broken_string(rs)) { + return len; + } pp = e - rslen; if (p[len-1] == newline && (rslen <= 1 || |