Remove MacOS classic support from File::{Copy,DosGlob,Find,Glob,stat}.
authorNicholas Clark <nick@ccl4.org>
Mon, 21 Jun 2010 20:10:40 +0000 (21:10 +0100)
committerNicholas Clark <nick@ccl4.org>
Wed, 23 Jun 2010 07:52:45 +0000 (08:52 +0100)
ExtUtils::MakeMaker removed MacOS support in 6.25, merged to blead in December
2004, so this code is vestigial, and a small runtime penalty.

ext/File-Glob/Glob.pm
lib/File/Copy.pm
lib/File/DosGlob.pm
lib/File/Find.pm
lib/File/stat.pm

index 7c6b92c..240e0a5 100644 (file)
@@ -56,7 +56,7 @@ use XSLoader ();
     ) ],
 );
 
-$VERSION = '1.07';
+$VERSION = '1.08';
 
 sub import {
     require Exporter;
@@ -110,7 +110,7 @@ sub GLOB_CSH () {
 }
 
 $DEFAULT_FLAGS = GLOB_CSH();
-if ($^O =~ /^(?:MSWin32|VMS|os2|dos|riscos|MacOS)$/) {
+if ($^O =~ /^(?:MSWin32|VMS|os2|dos|riscos)$/) {
     $DEFAULT_FLAGS |= GLOB_NOCASE();
 }
 
index 8382565..e14b01b 100644 (file)
@@ -41,13 +41,6 @@ sub carp {
     goto &Carp::carp;
 }
 
-my $macfiles;
-if ($^O eq 'MacOS') {
-       $macfiles = eval { require Mac::MoreFiles };
-       warn 'Mac::MoreFiles could not be loaded; using non-native syscopy'
-               if $@ && $^W;
-}
-
 # Look up the feature settings on VMS using VMS::Feature when available.
 
 my $use_vms_feature = 0;
@@ -93,11 +86,6 @@ sub _catname {
        import  File::Basename 'basename';
     }
 
-    if ($^O eq 'MacOS') {
-       # a partial dir name that's valid only in the cwd (e.g. 'tmp')
-       $to = ':' . $to if $to !~ /:/;
-    }
-
     return File::Spec->catfile($to, basename($from));
 }
 
@@ -166,7 +154,6 @@ sub copy {
        && !($from_a_handle && $^O eq 'os2' )   # OS/2 cannot handle handles
        && !($from_a_handle && $^O eq 'mpeix')  # and neither can MPE/iX.
        && !($from_a_handle && $^O eq 'MSWin32')
-       && !($from_a_handle && $^O eq 'MacOS')
        && !($from_a_handle && $^O eq 'NetWare')
        )
     {
@@ -436,22 +423,6 @@ unless (defined &syscopy) {
            return 0 unless @_ == 2;
            return Win32::CopyFile(@_, 1);
        };
-    } elsif ($macfiles) {
-       *syscopy = sub {
-           my($from, $to) = @_;
-           my($dir, $toname);
-
-           return 0 unless -e $from;
-
-           if ($to =~ /(.*:)([^:]+):?$/) {
-               ($dir, $toname) = ($1, $2);
-           } else {
-               ($dir, $toname) = (":", $to);
-           }
-
-           unlink($to);
-           Mac::MoreFiles::FSpFileCopy($from, $dir, $toname, 1);
-       };
     } else {
        $Syscopy_is_copy = 1;
        *syscopy = \&copy;
index 496a14c..0963b39 100644 (file)
@@ -9,7 +9,7 @@
 
 package File::DosGlob;
 
-our $VERSION = '1.01';
+our $VERSION = '1.02';
 use strict;
 use warnings;
 
@@ -261,40 +261,6 @@ sub _expand_volume {
        return @new_pat;
 }
 
-
-#
-# _preprocess_pattern() will only be used on Mac OS (Classic): 
-# Resolves any updirs in the pattern. Removes a single trailing colon 
-# from the pattern, unless it's a volume name pattern like "*HD:"
-#
-sub _preprocess_pattern {
-       my @pat = @_;
-       
-       foreach my $p (@pat) {
-               my $proceed;
-               # resolve any updirs, e.g. "*HD:t?p::a*" -> "*HD:a*"
-               do {
-                       $proceed = ($p =~ s/^(.*):[^:]+::(.*?)\z/$1:$2/);  
-               } while ($proceed);
-               # remove a single trailing colon, e.g. ":*:" -> ":*"
-               $p =~ s/:([^:]+):\z/:$1/;
-       }
-       return @pat;
-}
-               
-               
-#
-# _un_escape() will only be used on Mac OS (Classic):
-# Unescapes a list of arguments which may contain escaped 
-# metachars '*', '?' and '\'.
-#
-sub _un_escape {
-       foreach (@_) {
-               s/\\([*?\\])/$1/g;
-       }
-       return @_;
-}
-
 #
 # this can be used to override CORE::glob in a specific
 # package by saying C<use File::DosGlob 'glob';> in that
@@ -373,15 +339,7 @@ sub glob {
 
     # if we're just beginning, do it all first
     if ($iter{$cxix} == 0) {
-       if ($^O eq 'MacOS') {
-               # first, take care of updirs and trailing colons
-               @pat = _preprocess_pattern(@pat);
-               # expand volume names
-               @pat = _expand_volume(@pat);
-               $entries{$cxix} = (@pat) ? [_un_escape( doglob_Mac(1,@pat) )] : [()];
-       } else {
-               $entries{$cxix} = [doglob(1,@pat)];
-    }
+           $entries{$cxix} = [doglob(1,@pat)];
        }
 
     # chuck it all out, quick or slow
index c9c6f69..2967bd3 100644 (file)
@@ -3,7 +3,7 @@ use 5.006;
 use strict;
 use warnings;
 use warnings::register;
-our $VERSION = '1.16';
+our $VERSION = '1.17';
 require Exporter;
 require Cwd;
 
@@ -423,7 +423,6 @@ our @EXPORT = qw(find finddepth);
 
 use strict;
 my $Is_VMS;
-my $Is_MacOS;
 
 require File::Basename;
 require File::Spec;
@@ -505,32 +504,20 @@ sub PathCombine($$) {
     my ($Base,$Name) = @_;
     my $AbsName;
 
-    if ($Is_MacOS) {
-       # $Name is the resolved symlink (always a full path on MacOS),
-       # i.e. there's no need to call contract_name_Mac()
-       $AbsName = $Name;
-
-       # (simple) check for recursion
-       if ( ( $Base =~ /^$AbsName/) && (-d $AbsName) ) { # recursion
-           return undef;
-       }
+    if (substr($Name,0,1) eq '/') {
+       $AbsName= $Name;
     }
     else {
-       if (substr($Name,0,1) eq '/') {
-           $AbsName= $Name;
-       }
-       else {
-           $AbsName= contract_name($Base,$Name);
-       }
+       $AbsName= contract_name($Base,$Name);
+    }
 
-       # (simple) check for recursion
-       my $newlen= length($AbsName);
-       if ($newlen <= length($Base)) {
-           if (($newlen == length($Base) || substr($Base,$newlen,1) eq '/')
-               && $AbsName eq substr($Base,0,$newlen))
-           {
-               return undef;
-           }
+    # (simple) check for recursion
+    my $newlen= length($AbsName);
+    if ($newlen <= length($Base)) {
+       if (($newlen == length($Base) || substr($Base,$newlen,1) eq '/')
+           && $AbsName eq substr($Base,0,$newlen))
+       {
+           return undef;
        }
     }
     return $AbsName;
@@ -652,10 +639,7 @@ sub _find_opt {
 
        ($topdev,$topino,$topmode,$topnlink) = $follow ? stat $top_item : lstat $top_item;
 
-       if ($Is_MacOS) {
-           $top_item = ":$top_item"
-               if ( (-d _) && ( $top_item !~ /:/ ) );
-       } elsif ($^O eq 'MSWin32') {
+       if ($^O eq 'MSWin32') {
            $top_item =~ s|/\z|| unless $top_item =~ m|\w:/$|;
        }
        else {
@@ -666,32 +650,15 @@ sub _find_opt {
 
        if ($follow) {
 
-           if ($Is_MacOS) {
-               $cwd = "$cwd:" unless ($cwd =~ /:$/); # for safety
-
-               if ($top_item eq $File::Find::current_dir) {
-                   $abs_dir = $cwd;
-               }
-               else {
-                   $abs_dir = contract_name_Mac($cwd, $top_item);
-                   unless (defined $abs_dir) {
-                       warnings::warnif "Can't determine absolute path for $top_item (No such file or directory)\n";
-                       next Proc_Top_Item;
-                   }
-               }
-
+           if (substr($top_item,0,1) eq '/') {
+               $abs_dir = $top_item;
            }
-           else {
-               if (substr($top_item,0,1) eq '/') {
-                   $abs_dir = $top_item;
-               }
-               elsif ($top_item eq $File::Find::current_dir) {
-                   $abs_dir = $cwd;
-               }
-               else {  # care about any  ../
-                   $top_item =~ s/\.dir\z//i if $Is_VMS;
-                   $abs_dir = contract_name("$cwd/",$top_item);
-               }
+           elsif ($top_item eq $File::Find::current_dir) {
+               $abs_dir = $cwd;
+           }
+           else {  # care about any  ../
+               $top_item =~ s/\.dir\z//i if $Is_VMS;
+               $abs_dir = contract_name("$cwd/",$top_item);
            }
            $abs_dir= Follow_SymLink($abs_dir);
            unless (defined $abs_dir) {
@@ -729,12 +696,7 @@ sub _find_opt {
 
        unless ($Is_Dir) {
            unless (($_,$dir) = File::Basename::fileparse($abs_dir)) {
-               if ($Is_MacOS) {
-                   ($dir,$_) = (':', $top_item); # $File::Find::dir, $_
-               }
-               else {
-                   ($dir,$_) = ('./', $top_item);
-               }
+               ($dir,$_) = ('./', $top_item);
            }
 
            $abs_dir = $dir;
@@ -797,9 +759,7 @@ sub _find_dir($$$) {
     my $tainted = 0;
     my $no_nlink;
 
-    if ($Is_MacOS) {
-       $dir_pref= ($p_dir =~ /:$/) ? $p_dir : "$p_dir:"; # preface
-    } elsif ($^O eq 'MSWin32') {
+    if ($^O eq 'MSWin32') {
        $dir_pref = ($p_dir =~ m|\w:/?$| ? $p_dir : "$p_dir/" );
     } elsif ($^O eq 'VMS') {
 
@@ -840,10 +800,6 @@ sub _find_dir($$$) {
     # push the starting directory
     push @Stack,[$CdLvl,$p_dir,$dir_rel,-1]  if  $bydepth;
 
-    if ($Is_MacOS) {
-       $p_dir = $dir_pref;  # ensure trailing ':'
-    }
-
     while (defined $SE) {
        unless ($bydepth) {
            $dir= $p_dir; # $File::Find::dir
@@ -862,34 +818,20 @@ sub _find_dir($$$) {
                ( $udir ) = $dir_rel =~ m|$untaint_pat|;
                unless (defined $udir) {
                    if ($untaint_skip == 0) {
-                       if ($Is_MacOS) {
-                           die "directory ($p_dir) $dir_rel is still tainted";
-                       }
-                       else {
-                           die "directory (" . ($p_dir ne '/' ? $p_dir : '') . "/) $dir_rel is still tainted";
-                       }
+                       die "directory (" . ($p_dir ne '/' ? $p_dir : '') . "/) $dir_rel is still tainted";
                    } else { # $untaint_skip == 1
                        next;
                    }
                }
            }
            unless (chdir ($Is_VMS && $udir !~ /[\/\[<]+/ ? "./$udir" : $udir)) {
-               if ($Is_MacOS) {
-                   warnings::warnif "Can't cd to ($p_dir) $udir: $!\n";
-               }
-               else {
-                   warnings::warnif "Can't cd to (" .
-                       ($p_dir ne '/' ? $p_dir : '') . "/) $udir: $!\n";
-               }
+               warnings::warnif "Can't cd to (" .
+                   ($p_dir ne '/' ? $p_dir : '') . "/) $udir: $!\n";
                next;
            }
            $CdLvl++;
        }
 
-       if ($Is_MacOS) {
-           $dir_name = "$dir_name:" unless ($dir_name =~ /:$/);
-       }
-
        $dir= $dir_name; # $File::Find::dir
 
        # Get the list of files in the current directory.
@@ -971,10 +913,7 @@ sub _find_dir($$$) {
            ($Level, $p_dir, $dir_rel, $nlink) = @$SE;
            if ($CdLvl > $Level && !$no_chdir) {
                my $tmp;
-               if ($Is_MacOS) {
-                   $tmp = (':' x ($CdLvl-$Level)) . ':';
-               }
-               elsif ($Is_VMS) {
+               if ($Is_VMS) {
                    $tmp = '[' . ('-' x ($CdLvl-$Level)) . ']';
                }
                else {
@@ -985,13 +924,7 @@ sub _find_dir($$$) {
                $CdLvl = $Level;
            }
 
-           if ($Is_MacOS) {
-               # $pdir always has a trailing ':', except for the starting dir,
-               # where $dir_rel eq ':'
-               $dir_name = "$p_dir$dir_rel";
-               $dir_pref = "$dir_name:";
-           }
-           elsif ($^O eq 'MSWin32') {
+           if ($^O eq 'MSWin32') {
                $dir_name = ($p_dir =~ m|\w:/?$| ? "$p_dir$dir_rel" : "$p_dir/$dir_rel");
                $dir_pref = "$dir_name/";
            }
@@ -1018,23 +951,13 @@ sub _find_dir($$$) {
            }
            elsif ( $nlink < 0 ) {  # must be finddepth, report dirname now
                $name = $dir_name;
-               if ($Is_MacOS) {
-                   if ($dir_rel eq ':') { # must be the top dir, where we started
-                       $name =~ s|:$||; # $File::Find::name
-                       $p_dir = "$p_dir:" unless ($p_dir =~ /:$/);
-                   }
-                   $dir = $p_dir; # $File::Find::dir
-                   $_ = ($no_chdir ? $name : $dir_rel); # $_
+               if ( substr($name,-2) eq '/.' ) {
+                   substr($name, length($name) == 2 ? -1 : -2) = '';
                }
-               else {
-                   if ( substr($name,-2) eq '/.' ) {
-                       substr($name, length($name) == 2 ? -1 : -2) = '';
-                   }
-                   $dir = $p_dir;
-                   $_ = ($no_chdir ? $dir_name : $dir_rel );
-                   if ( substr($_,-2) eq '/.' ) {
-                       substr($_, length($_) == 2 ? -1 : -2) = '';
-                   }
+               $dir = $p_dir;
+               $_ = ($no_chdir ? $dir_name : $dir_rel );
+               if ( substr($_,-2) eq '/.' ) {
+                   substr($_, length($_) == 2 ? -1 : -2) = '';
                }
                { $wanted_callback->() }; # protect against wild "next"
             }
@@ -1069,13 +992,8 @@ sub _find_dir_symlnk($$$) {
     my $tainted = 0;
     my $ok = 1;
 
-    if ($Is_MacOS) {
-       $dir_pref = ($p_dir =~ /:$/) ? "$p_dir" : "$p_dir:";
-       $loc_pref = ($dir_loc =~ /:$/) ? "$dir_loc" : "$dir_loc:";
-    } else {
-       $dir_pref = ( $p_dir   eq '/' ? '/' : "$p_dir/" );
-       $loc_pref = ( $dir_loc eq '/' ? '/' : "$dir_loc/" );
-    }
+    $dir_pref = ( $p_dir   eq '/' ? '/' : "$p_dir/" );
+    $loc_pref = ( $dir_loc eq '/' ? '/' : "$dir_loc/" );
 
     local ($dir, $name, $fullname, $prune, *DIR);
 
@@ -1104,10 +1022,6 @@ sub _find_dir_symlnk($$$) {
 
     push @Stack,[$dir_loc,$updir_loc,$p_dir,$dir_rel,-1]  if  $bydepth;
 
-    if ($Is_MacOS) {
-       $p_dir = $dir_pref; # ensure trailing ':'
-    }
-
     while (defined $SE) {
 
        unless ($bydepth) {
@@ -1150,10 +1064,6 @@ sub _find_dir_symlnk($$$) {
            }
        }
 
-       if ($Is_MacOS) {
-           $dir_name = "$dir_name:" unless ($dir_name =~ /:$/);
-       }
-
        $dir = $dir_name; # $File::Find::dir
 
        # Get the list of files in the current directory.
@@ -1216,18 +1126,9 @@ sub _find_dir_symlnk($$$) {
     continue {
        while (defined($SE = pop @Stack)) {
            ($dir_loc, $updir_loc, $p_dir, $dir_rel, $byd_flag) = @$SE;
-           if ($Is_MacOS) {
-               # $p_dir always has a trailing ':', except for the starting dir,
-               # where $dir_rel eq ':'
-               $dir_name = "$p_dir$dir_rel";
-               $dir_pref = "$dir_name:";
-               $loc_pref = ($dir_loc =~ /:$/) ? $dir_loc : "$dir_loc:";
-           }
-           else {
-               $dir_name = ($p_dir eq '/' ? "/$dir_rel" : "$p_dir/$dir_rel");
-               $dir_pref = "$dir_name/";
-               $loc_pref = "$dir_loc/";
-           }
+           $dir_name = ($p_dir eq '/' ? "/$dir_rel" : "$p_dir/$dir_rel");
+           $dir_pref = "$dir_name/";
+           $loc_pref = "$dir_loc/";
            if ( $byd_flag < 0 ) {  # must be finddepth, report dirname now
                unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) {
                    unless (chdir $updir_loc) { # $updir_loc (parent dir) is always untainted
@@ -1237,23 +1138,13 @@ sub _find_dir_symlnk($$$) {
                }
                $fullname = $dir_loc; # $File::Find::fullname
                $name = $dir_name; # $File::Find::name
-               if ($Is_MacOS) {
-                   if ($dir_rel eq ':') { # must be the top dir, where we started
-                       $name =~ s|:$||; # $File::Find::name
-                       $p_dir = "$p_dir:" unless ($p_dir =~ /:$/);
-                   }
-                   $dir = $p_dir; # $File::Find::dir
-                    $_ = ($no_chdir ? $name : $dir_rel); # $_
+               if ( substr($name,-2) eq '/.' ) {
+                   substr($name, length($name) == 2 ? -1 : -2) = ''; # $File::Find::name
                }
-               else {
-                   if ( substr($name,-2) eq '/.' ) {
-                       substr($name, length($name) == 2 ? -1 : -2) = ''; # $File::Find::name
-                   }
-                   $dir = $p_dir; # $File::Find::dir
-                   $_ = ($no_chdir ? $dir_name : $dir_rel); # $_
-                   if ( substr($_,-2) eq '/.' ) {
-                       substr($_, length($_) == 2 ? -1 : -2) = '';
-                   }
+               $dir = $p_dir; # $File::Find::dir
+               $_ = ($no_chdir ? $dir_name : $dir_rel); # $_
+               if ( substr($_,-2) eq '/.' ) {
+                   substr($_, length($_) == 2 ? -1 : -2) = '';
                }
 
                lstat($_); # make sure file tests with '_' work
@@ -1312,12 +1203,6 @@ if ($^O eq 'VMS') {
     $Is_VMS = 1;
     $File::Find::dont_use_nlink  = 1;
 }
-elsif ($^O eq 'MacOS') {
-    $Is_MacOS = 1;
-    $File::Find::dont_use_nlink  = 1;
-    $File::Find::skip_pattern    = qr/^Icon\015\z/;
-    $File::Find::untaint_pattern = qr|^(.+)$|;
-}
 
 # this _should_ work properly on all platforms
 # where File::Find can be expected to work
index bdf3aad..3c16658 100644 (file)
@@ -45,9 +45,6 @@ BEGIN {
 
 # from doio.c
 sub _ingroup {
-
-    $^O eq "MacOS"  and return 1;
-    
     my ($gid, $eff)   = @_;
 
     # I am assuming that since VMS doesn't have getgroups(2), $) will