fix. sorting would fail at dirs with special matching chars in the name

This commit is contained in:
Ward Wouts 2003-02-06 22:48:19 +00:00
parent 6b6935761a
commit ce99256868

View file

@ -40,6 +40,7 @@ sub cmdline {
if ( scalar @dirs == 0 ) {
push @dirs, ".";
}
# map { print "$_\n"; } @dirs;
}
sub getdir {
@ -182,20 +183,38 @@ sub output_doubles(@) {
sub output($) {
my $string = shift;
if ($opts{e}) {
$string =~ s/([ \&\;\`\'\\\"\|\*\?\~\<\>\^\(\)\[\]\{\}\$\010\013\020\011])/\\${1}/g;
$string = &escape($string);
}
print "$string";
}
sub escape($) {
my $string = shift;
$string =~ s/([ \&\;\`\'\\\"\|\*\?\~\<\>\^\(\)\[\]\{\}\$\010\013\020\011])/\\${1}/g;
return $string;
}
sub unescape($) {
my $string = shift;
$string =~ s/\\([ \&\;\`\'\\\"\|\*\?\~\<\>\^\(\)\[\]\{\}\$\010\013\020\011])/${1}/g;
return $string;
}
sub dirsort {
my $firstdir = $dirs[0];
if ( $a =~ /^$firstdir\/[^\/]*$/ && $b =~ /^$firstdir\/[^\/]*$/ ) {
my $firstdir = &escape($dirs[0]);
my $debuglevel = 0;
print "$a $b\n" if $debuglevel == 1;
if ( $a =~ /^$firstdir\/[^\/]*$/o && $b =~ /^$firstdir\/[^\/]*$/o ) {
print "A $a $b\n" if $debuglevel == 1;
return &wardsort;
} elsif ( ( $a =~ /^$firstdir\/[^\/]*$/ ) && ! ( $b =~ /^$firstdir\/[^\/]*$/ ) ) {
} elsif ( ( $a =~ /^$firstdir\/[^\/]*$/o ) && ! ( $b =~ /^$firstdir\/[^\/]*$/o ) ) {
print "B $a $b\n" if $debuglevel == 1;
return -1;
} elsif ( ! ( $a =~ /^$firstdir\/[^\/]*$/ ) && ( $b =~ /^$firstdir\/[^\/]*$/ ) ) {
} elsif ( ! ( $a =~ /^$firstdir\/[^\/]*$/o ) && ( $b =~ /^$firstdir\/[^\/]*$/o ) ) {
print "C $a $b\n" if $debuglevel == 1;
return 1;
} else {
print "D $a $b\n" if $debuglevel == 1;
return &wardsort;
}
}