fix. sorting would fail at dirs with special matching chars in the name
This commit is contained in:
parent
6b6935761a
commit
ce99256868
1 changed files with 24 additions and 5 deletions
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue