aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-01-30 05:29:37 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-01-30 05:29:37 +0000
commit84fe38438311911211c2d415967ed7c07624175b (patch)
tree2d5faeecbb5aa3263350c24b3f5e30cfe0b6cbbb
parent44cfd58dc5f3949ff5cbcf7350a3e76d6ff1c49c (diff)
downloadruby-84fe38438311911211c2d415967ed7c07624175b.tar.gz
* string.c (rb_str_succ): use wrapped character as a carry for
ASCII incompatible encoding. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15339 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog9
-rw-r--r--string.c4
-rw-r--r--test/ruby/test_utf16.rb8
3 files changed, 19 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 4cdb594db2..4ac70fb358 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Jan 30 14:27:19 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_succ): use wrapped character as a carry for
+ ASCII incompatible encoding.
+
Wed Jan 30 12:26:59 2008 Tanaka Akira <akr@fsij.org>
* enc/utf_16be.c (UTF16_IS_SURROGATE_FIRST): avoid branch.
@@ -12,7 +17,7 @@ Wed Jan 30 12:26:59 2008 Tanaka Akira <akr@fsij.org>
Wed Jan 30 12:06:43 2008 Tadayoshi Funaba <tadf@dotrb.org>
- * bignum.c (rb_cstr_to_inum): '0_2' is a valid representatin.
+ * bignum.c (rb_cstr_to_inum): '0_2' is a valid representation.
Wed Jan 30 11:57:50 2008 NARUSE, Yui <naruse@ruby-lang.org>
@@ -141,7 +146,7 @@ Tue Jan 29 03:01:29 2008 NAKAMURA Usaku <usa@ruby-lang.org>
Tue Jan 29 01:38:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
* common.mk ($(srcdir)/revision.h): no need to show ifchange execution
- because ifchange echos updated or unchaned.
+ because ifchange echos updated or unchanged.
Tue Jan 29 01:26:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
diff --git a/string.c b/string.c
index 29473251a3..945241ca3d 100644
--- a/string.c
+++ b/string.c
@@ -2203,6 +2203,10 @@ rb_str_succ(VALUE orig)
/* wrapped to \0...\0. search next valid char. */
enc_succ_char(s, l, enc);
}
+ if (!rb_enc_asciicompat(enc)) {
+ MEMCPY(carry, s, char, l);
+ carry_len = l;
+ }
carry_pos = s - sbeg;
}
}
diff --git a/test/ruby/test_utf16.rb b/test/ruby/test_utf16.rb
index 05236348d6..654818fbc8 100644
--- a/test/ruby/test_utf16.rb
+++ b/test/ruby/test_utf16.rb
@@ -176,6 +176,14 @@ EOT
assert_str_equal(s, s.chomp, "#{encdump s}.chomp")
end
+ def test_succ
+ s = "\xff\xff".force_encoding("utf-16be")
+ assert(s.succ.valid_encoding?, "#{encdump s}.succ.valid_encoding?")
+
+ s = "\xdb\xff\xdf\xff".force_encoding("utf-16be")
+ assert(s.succ.valid_encoding?, "#{encdump s}.succ.valid_encoding?")
+ end
+
def test_regexp_union
enccall(Regexp, :union, "aa".force_encoding("utf-16be"), "bb".force_encoding("utf-16be"))
end