X-Git-Url: https://git.p6c8.net/devedit.git/blobdiff_plain/0fb9dcffcc2a1be81de150bae084e195c5f66658..4420382fd54774603ff1d4b23bf321280051a1ce:/modules/Tool.pm diff --git a/modules/Tool.pm b/modules/Tool.pm index 0b1159d..afffeb3 100644 --- a/modules/Tool.pm +++ b/modules/Tool.pm @@ -6,7 +6,7 @@ package Tool; # Some shared sub routines # # Author: Patrick Canterino -# Last modified: 2005-01-07 +# Last modified: 2005-04-22 # use strict; @@ -61,36 +61,19 @@ sub check_path($$) # We extract the last part of the path and create the absolute path my $first = upper_path($path); + $first = File::Spec->canonpath($first); $first = abs_path($first); my $last = file_name($path); $last = '' if($last eq '.'); - if($last eq '..') + if($last eq '..' || ($^O eq 'MSWin32' && $last =~ m!^\.\.\.+$!)) { - $first = upper_path($first); + $first = abs_path($first.'/'.$last); $last = ''; } - elsif($^O eq 'MSWin32' && $last =~ m!^\.\.\.+$!) - { - # Windows allows to go upwards in a path using things like - # "..." and "...." and so on - - for(my $x=0;$xcanonpath($first); - $path = File::Spec->canonpath($path); + $path = File::Spec->canonpath($first.'/'.$last); # Check if the path is above the root directory @@ -101,7 +84,7 @@ sub check_path($$) my $short_path = substr($path,length($root)); $short_path =~ tr!\\!/!; $short_path = '/'.$short_path if($short_path !~ m!^/!); - $short_path = $short_path.'/' if($short_path !~ m!/$! && -d $path); + $short_path = $short_path.'/' if($short_path !~ m!/$! && -d $path && not -l $path); return ($path,$short_path); } @@ -241,7 +224,7 @@ sub file_name($) my $path = shift; $path =~ tr!\\!/!; - unless($path eq '/') + unless($path =~ m!^/+$! || ($^O eq 'MSWin32' && $path =~ m!^[a-z]:/+$!i)) { $path =~ s!/+$!!; $path = substr($path,rindex($path,'/')+1); @@ -290,7 +273,8 @@ sub mode_string($) # upper_path() # -# Cut away the last part of a path +# Remove the last part of a path +# (the resulting path contains a trailing slash) # # Params: Path # @@ -301,7 +285,7 @@ sub upper_path($) my $path = shift; $path =~ tr!\\!/!; - unless($path eq '/') + unless($path =~ m!^/+$! || ($^O eq 'MSWin32' && $path =~ m!^[a-z]:/+$!i)) { $path =~ s!/+$!!; $path = substr($path,0,rindex($path,'/')+1);