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