aboutsummaryrefslogtreecommitdiffstats
path: root/string.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-02-24 00:47:12 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-02-24 00:47:12 +0000
commit4c0106ead6ba06487e837f32e3d80ecd8a310032 (patch)
tree6ed62b336e90bd5ee8bec51ee697bb537145b9f7 /string.c
parent673af3e9f27ba4282d04855febc3ad7dc7e736eb (diff)
downloadruby-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.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/string.c b/string.c
index e6e28d6838..9419e31115 100644
--- a/string.c
+++ b/string.c
@@ -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 ||