Bug 15370

Summary: bug in sort
Product: Base System Reporter: Nikita Shamgunov <nsh>
Component: binAssignee: Mark Murray <markm>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: 3.3-STABLE   
Hardware: Any   
OS: Any   

Description Nikita Shamgunov 1999-12-09 10:00:01 UTC
    ðÒÏÂÌÅÍÙ Ó ÓÏÒÔÉÒÏ×ËÏÊ ÍÁÓÓÉ×Ï× ÒÕÓÓËÉÈ ÓÌÏ× ÂÅÚ
    ÒÁÚÌÉÞÅÎÉÊ ÒÅÇÉÓÔÒÁ.

How-To-Repeat: 
#!/usr/bin/perl

use strict;
use locale;
use POSIX qw( locale_h );
setlocale( LC_ALL, 'KOI8-R' );

my @array;
while( <DATA> ) {
	next if( /^#/ );
	s/\s*(\S+)\s*/$1/;
	push( @array, $_ );
}

#
# åÓÌÉ ÐÏÓÔÁ×ÉÔØ ÜÔÕ ÓÔÒÏËÕ ÔÏ ÓÏÒÔÉÒÕÅÔ ×ÅÒÎÏ lc - × ÎÉÖÎÉÊ ÒÅÇÉÓÔÒ
# my @array1 = sort {lc1($a) cmp lc1($b)} @array;
#

#
# îÅ×ÅÒÎÏ ÓÏÒÔÉÒÕÅÔ
my @array1 = sort {lc($a) cmp lc($b)} @array;

# ÷Ù×ÏÄÉÍ ÒÅÚÕÌØÔÁÔ
print join( "\n", @array1 );

sub lc1 {
	my $str = shift;
	$str =~ tr/áâ÷çäåöúéëìíîïðòóôõæèãþûýÿùøüàñ/ÁÂ×ÇÄÅÖÚÉËÌÍÎÏÐÒÓÔÕÆÈÃÞÛÝßÙØÜÀÑ/;
        return $str;
}

__DATA__
ääô
äÉÓÔÅÍÐÅÒ
äÅÌØÆÉÎ
Comment 1 Andrey A. Chernov freebsd_committer freebsd_triage 1999-12-10 14:20:40 UTC
On Thu, Dec 09, 1999 at 02:50:52PM +0500, Nikita Shamgunov wrote:
> #
> # îÅ×ÅÒÎÏ ÓÏÒÔÉÒÕÅÔ
> my @array1 = sort {lc($a) cmp lc($b)} @array;

It looks like some problem with lc+cmp combination.
It works when result of lc assigned to variable first, i.e.

sub comp {
$aa = lc($a);
$bb = lc($b);
return $aa cmp $bb;
}

-- 
Andrey A. Chernov
http://nagual.pp.ru/~ache/
MTH/SH/HE S-- W-- N+ PEC>+ D A a++ C G>+ QH+(++) 666+>++ Y
Comment 2 Andrey A. Chernov freebsd_committer freebsd_triage 1999-12-10 17:15:41 UTC
On Thu, Dec 09, 1999 at 02:50:52PM +0500, Nikita Shamgunov wrote:
> my @array1 = sort {lc($a) cmp lc($b)} @array;

This patch should fix the problem:

--- pp.c.old	Wed May 26 06:04:22 1999
+++ pp.c	Fri Dec 10 19:52:31 1999
@@ -2178,7 +2178,8 @@
 	else
 	    *s = toUPPER(*s);
     }
-
+    if (SvSMAGICAL(sv))
+	mg_set(sv);
     RETURN;
 }
 
@@ -2207,6 +2208,8 @@
     }
 
     SETs(sv);
+    if (SvSMAGICAL(sv))
+	mg_set(sv);
     RETURN;
 }
 
@@ -2239,6 +2242,8 @@
 		*s = toUPPER(*s);
 	}
     }
+    if (SvSMAGICAL(sv))
+	mg_set(sv);
     RETURN;
 }
 
@@ -2271,6 +2276,8 @@
 		*s = toLOWER(*s);
 	}
     }
+    if (SvSMAGICAL(sv))
+	mg_set(sv);
     RETURN;
 }
 
@@ -2298,6 +2305,8 @@
     else
 	sv_setpvn(TARG, s, len);
     SETs(TARG);
+    if (SvSMAGICAL(TARG))
+	mg_set(TARG);
     RETURN;
 }
 

-- 
Andrey A. Chernov
http://nagual.pp.ru/~ache/
MTH/SH/HE S-- W-- N+ PEC>+ D A a++ C G>+ QH+(++) 666+>++ Y
Comment 3 Sheldon Hearn freebsd_committer freebsd_triage 1999-12-13 11:52:01 UTC
Responsible Changed
From-To: freebsd-bugs->markm

Mark will be interested in the patch. 
Comment 4 Andrey A. Chernov freebsd_committer freebsd_triage 1999-12-13 21:06:28 UTC
State Changed
From-To: open->closed