summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-24 02:40:55 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-24 02:40:55 +0000
commit37855698ffd3ae3080304f08b0ec75df68ba0c8b (patch)
tree4a5e878650df1fcb297d83ff34ce85af4f668089
parent7c92ab16a9d911e61cccb8c030956bd3354238e4 (diff)
* string.c (rb_str_comparable): fixed to keep transitivity.
[ruby-dev:32693] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14568 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog7
-rw-r--r--string.c18
-rw-r--r--test/ruby/test_io.rb1
3 files changed, 20 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index ecbced0990..544a21e8c7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Dec 24 11:32:44 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_comparable): fixed to keep transitivity.
+ [ruby-dev:32693]
+
Mon Dec 24 11:20:31 2007 Eric Hodel <drbrain@segment7.net>
* lib/rdoc/ri/ri_options.rb: Fix display of GEMDIRS, make command
@@ -20,8 +25,6 @@ Mon Dec 24 09:45:45 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
* transcode.c, transcode_data_one_byte.c, transcode_data_japanese.c:
added rb_ prefix to external data symbols.
-Mon Dec 24 06:36:00 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
Mon Dec 24 05:32:22 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
* enum.c (enum_inject): updated documentation. a patch from Keita
diff --git a/string.c b/string.c
index 60eadbd1db..fd2c672f1c 100644
--- a/string.c
+++ b/string.c
@@ -1274,10 +1274,15 @@ rb_str_comparable(VALUE str1, VALUE str2)
if (idx1 == idx2) return Qtrue;
rc1 = rb_enc_str_coderange(str1);
rc2 = rb_enc_str_coderange(str2);
- if (rc1 == ENC_CODERANGE_7BIT && rc2 == ENC_CODERANGE_7BIT)
- return Qtrue;
- if (rc1 == ENC_CODERANGE_BROKEN) return Qtrue;
- if (rc2 == ENC_CODERANGE_BROKEN) return Qtrue;
+ if (rc1 == ENC_CODERANGE_7BIT) {
+ if (rc2 == ENC_CODERANGE_7BIT) return Qtrue;
+ if (rb_enc_asciicompat(rb_enc_from_index(idx1)))
+ return Qtrue;
+ }
+ if (rc2 == ENC_CODERANGE_7BIT) {
+ if (rb_enc_asciicompat(rb_enc_from_index(idx2)))
+ return Qtrue;
+ }
return Qfalse;
}
@@ -1293,6 +1298,11 @@ rb_str_cmp(VALUE str1, VALUE str2)
retval = memcmp(RSTRING_PTR(str1), RSTRING_PTR(str2), len);
if (retval == 0) {
if (RSTRING_LEN(str1) == RSTRING_LEN(str2)) {
+ if (!enc) {
+ if (rb_enc_get(str1) - rb_enc_get(str2) > 0)
+ return 1;
+ return -1;
+ }
return 0;
}
if (RSTRING_LEN(str1) > RSTRING_LEN(str2)) return 1;
diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb
index 4d4f48d436..de75bfd55c 100644
--- a/test/ruby/test_io.rb
+++ b/test/ruby/test_io.rb
@@ -23,6 +23,7 @@ class TestIO < Test::Unit::TestCase
r, w = IO.pipe
w.print "\377xyz"
w.close
+ r.binmode
assert_equal("\377", r.gets("\377"), "[ruby-dev:24460]")
r.close