From 6bf11762ddeab53235730364e16faaef4533d76a Mon Sep 17 00:00:00 2001 From: Barrie Slaymaker Date: Tue, 14 Aug 2001 10:32:25 -0400 Subject: Re: bug in File::Spec 0.82 (canonpath) Message-ID: <20010814143225.A19822@jester.slaysys.com> p4raw-id: //depot/perl@11675 --- lib/File/Spec.t | 7 +++++-- lib/File/Spec/Unix.pm | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) (limited to 'lib') 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 -- cgit v1.2.1