[前][次][番号順一覧][スレッド一覧]

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

[前][次][番号順一覧][スレッド一覧]