summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarrie Slaymaker <barries@slaysys.com>2001-08-14 10:32:25 -0400
committerJarkko Hietaniemi <jhi@iki.fi>2001-08-15 03:28:20 +0000
commit6bf11762ddeab53235730364e16faaef4533d76a (patch)
tree6454e7ec6355f3b63edd14db15620fe8fb66f410
parentdab31494e8babda9e44271415766b2d4aac35d7a (diff)
downloadperl-6bf11762ddeab53235730364e16faaef4533d76a.tar.gz
Re: bug in File::Spec 0.82 (canonpath)
Message-ID: <20010814143225.A19822@jester.slaysys.com> p4raw-id: //depot/perl@11675
-rwxr-xr-xlib/File/Spec.t7
-rw-r--r--lib/File/Spec/Unix.pm4
2 files changed, 7 insertions, 4 deletions
diff --git a/lib/File/Spec.t b/lib/File/Spec.t
index c6d155fac1..b6adc775f3 100755
--- a/lib/File/Spec.t
+++ b/lib/File/Spec.t
@@ -53,7 +53,10 @@ BEGIN {
[ "Unix->canonpath('')", '' ],
[ "Unix->canonpath('///../../..//./././a//b/.././c/././')", '/a/b/../c' ],
-[ "Unix->canonpath('/.')", '/.' ],
+[ "Unix->canonpath('/.')", '/' ],
+[ "Unix->canonpath('/./')", '/' ],
+[ "Unix->canonpath('/a/./')", '/a' ],
+[ "Unix->canonpath('/a/.')", '/a' ],
[ "Unix->abs2rel('/t1/t2/t3','/t1/t2/t3')", '' ],
[ "Unix->abs2rel('/t1/t2/t4','/t1/t2/t3')", '../t4' ],
@@ -63,7 +66,7 @@ BEGIN {
#[ "Unix->abs2rel('../t4','/t1/t2/t3')", '../t4' ],
[ "Unix->abs2rel('/','/t1/t2/t3')", '../../..' ],
[ "Unix->abs2rel('///','/t1/t2/t3')", '../../..' ],
-[ "Unix->abs2rel('/.','/t1/t2/t3')", '../../../.' ],
+[ "Unix->abs2rel('/.','/t1/t2/t3')", '../../..' ],
[ "Unix->abs2rel('/./','/t1/t2/t3')", '../../..' ],
#[ "Unix->abs2rel('../t4','/t1/t2/t3')", '../t4' ],
diff --git a/lib/File/Spec/Unix.pm b/lib/File/Spec/Unix.pm
index 00899e71d6..ae2a94937d 100644
--- a/lib/File/Spec/Unix.pm
+++ b/lib/File/Spec/Unix.pm
@@ -26,7 +26,7 @@ Methods for manipulating file specifications.
=item canonpath
No physical check on the filesystem, but a logical cleanup of a
-path. On UNIX eliminated successive slashes and successive "/.".
+path. On UNIX eliminate successive slashes and successive "/.".
$cpath = File::Spec->canonpath( $path ) ;
@@ -41,7 +41,7 @@ sub canonpath {
$node = $1;
}
$path =~ s|/+|/|g unless($^O eq 'cygwin'); # xx////xx -> xx/xx
- $path =~ s|(/\.)+/|/|g; # xx/././xx -> xx/xx
+ $path =~ s@(/\.)+(/|\Z(?!\n))@/@g; # xx/././xx -> xx/xx
$path =~ s|^(\./)+||s unless $path eq "./"; # ./xx -> xx
$path =~ s|^/(\.\./)+|/|s; # /../../xx -> xx
$path =~ s|/\Z(?!\n)|| unless $path eq "/"; # xx/ -> xx