ruby-changes:3041
From: ko1@a...
Date: 24 Dec 2007 01:07:19 +0900
Subject: [ruby-changes:3041] matz - Ruby:r14533 (trunk): * string.c (rb_str_comparable): comparison including broken
matz 2007-12-24 01:07:09 +0900 (Mon, 24 Dec 2007)
New Revision: 14533
Modified files:
trunk/ChangeLog
trunk/string.c
Log:
* string.c (rb_str_comparable): comparison including broken
coderange strings do not consider encoding.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/string.c?r1=14533&r2=14532
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14533&r2=14532
Index: ChangeLog
===================================================================
--- ChangeLog (revision 14532)
+++ ChangeLog (revision 14533)
@@ -1,3 +1,8 @@
+Mon Dec 24 01:03:17 2007 Yukihiro Matsumoto <matz@r...>
+
+ * string.c (rb_str_comparable): comparison including broken
+ coderange strings do not consider encoding.
+
Mon Dec 24 00:57:15 2007 Yukihiro Matsumoto <matz@r...>
* io.c (open_key_args): IO direct methods (foreach, readlines,
Index: string.c
===================================================================
--- string.c (revision 14532)
+++ string.c (revision 14533)
@@ -1269,11 +1269,16 @@
{
int idx1 = rb_enc_get_index(str1);
int idx2 = rb_enc_get_index(str2);
+ int rc1, rc2;
if (idx1 == idx2) return Qtrue;
- if (!is_ascii_string(str1)) return Qfalse;
- if (!is_ascii_string(str2)) return Qfalse;
- 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;
+ return Qfalse;
}
int
@@ -1288,9 +1293,6 @@
retval = memcmp(RSTRING_PTR(str1), RSTRING_PTR(str2), len);
if (retval == 0) {
if (RSTRING_LEN(str1) == RSTRING_LEN(str2)) {
- if (!enc) {
- return rb_enc_get_index(str1) - rb_enc_get_index(str2);
- }
return 0;
}
if (RSTRING_LEN(str1) > RSTRING_LEN(str2)) return 1;
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml