From ce99256868d6764f65ad919a30c8d1f78936fcaa Mon Sep 17 00:00:00 2001 From: Ward Wouts Date: Thu, 6 Feb 2003 22:48:19 +0000 Subject: [PATCH] fix. sorting would fail at dirs with special matching chars in the name --- list_same/list_same | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/list_same/list_same b/list_same/list_same index e92af10..1400afe 100755 --- a/list_same/list_same +++ b/list_same/list_same @@ -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; } }