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