summaryrefslogtreecommitdiff
path: root/lib/File/Basename.pm
diff options
context:
space:
mode:
authorRobin Barker <rmb@cise.npl.co.uk>1997-01-07 17:19:59 +0000
committerChip Salzenberg <chip@atlantic.net>1997-01-08 11:52:00 +1200
commit42568e286aff62b9aeb2f25e792e30cec916a66b (patch)
tree4370eab0e2679948880615a78efb00718d84dbdd /lib/File/Basename.pm
parent90ce63d569d0e11f6675586fb55569c7fb6eb460 (diff)
downloadperl-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.pm22
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;