diff options
author | Robin Barker <rmb@cise.npl.co.uk> | 1997-01-07 17:19:59 +0000 |
---|---|---|
committer | Chip Salzenberg <chip@atlantic.net> | 1997-01-08 11:52:00 +1200 |
commit | 42568e286aff62b9aeb2f25e792e30cec916a66b (patch) | |
tree | 4370eab0e2679948880615a78efb00718d84dbdd /lib/File/Basename.pm | |
parent | 90ce63d569d0e11f6675586fb55569c7fb6eb460 (diff) | |
download | perl-42568e286aff62b9aeb2f25e792e30cec916a66b.tar.gz |
File::Basename::dirname bugs
private-msgid: <12393.9701071719@tempest.cise.npl.co.uk>
Diffstat (limited to 'lib/File/Basename.pm')
-rw-r--r-- | lib/File/Basename.pm | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/lib/File/Basename.pm b/lib/File/Basename.pm index ad44c5df32..af52c34c3a 100644 --- a/lib/File/Basename.pm +++ b/lib/File/Basename.pm @@ -149,7 +149,7 @@ sub fileparse { } if ($fstype =~ /^MSDOS/i) { ($dirpath,$basename) = ($fullname =~ /^(.*[:\\\/])?(.*)/); - $dirpath .= '.\\' unless $dirpath =~ /\\$/; + $dirpath .= '.\\' unless $dirpath =~ /[\\\/]$/; } elsif ($fstype =~ /^MacOS/i) { ($dirpath,$basename) = ($fullname =~ /^(.*:)?(.*)/); @@ -202,10 +202,11 @@ sub dirname { } if ($fstype =~ /MacOS/i) { return $dirname } elsif ($fstype =~ /MSDOS/i) { - if ( $dirname =~ /:\\$/) { return $dirname } - chop $dirname; - $dirname =~ s:[^\\]+$:: unless length($basename); - $dirname = '.' unless length($dirname); + $dirname =~ s/([^:])[\\\/]*$/$1/; + unless( length($basename) ) { + ($basename,$dirname) = fileparse $dirname; + $dirname =~ s/([^:])[\\\/]*$/$1/; + } } elsif ($fstype =~ /AmigaOS/i) { if ( $dirname =~ /:$/) { return $dirname } @@ -213,11 +214,12 @@ sub dirname { $dirname =~ s#[^:/]+$## unless length($basename); } else { - if ( $dirname =~ m:^/+$:) { return '/'; } - chop $dirname; - $dirname =~ s:[^/]+$:: unless length($basename); - $dirname =~ s:/+$:: ; - $dirname = '.' unless length($dirname); + $dirname =~ s:(.)/*$:$1:; + unless( length($basename) ) { + local($File::Basename::Fileparse_fstype) = $fstype; + ($basename,$dirname) = fileparse $dirname; + $dirname =~ s:(.)/*$:$1:; + } } $dirname; |