This patch makes File::Find use a new warning category
(via warnings::register) for its warning messages, so
it's possible to disable them (by "no warnings 'File::Find'")
without disabling all warnings.



--- lib/File/Find.pm.orig       Fri Oct 19 22:58:16 2001
+++ lib/File/Find.pm    Fri Nov  2 15:05:38 2001
@@ -2,7 +2,8 @@
 use 5.006;
 use strict;
 use warnings;
-our $VERSION = '1.03';
+use warnings::register;
+our $VERSION = '1.04';
 require Exporter;
 require Cwd;
 
@@ -190,6 +191,17 @@
 See also the script C<pfind> on CPAN for a nice application of this
 module.
 
+=head1 WARNINGS
+
+If you run your program with the C<-w> switch, or if you use the
+C<warnings> pragma, File::Find will report warnings for several weird
+situations. You can disable these warnings by putting the statement
+
+    no warnings 'File::Find';
+
+in the appropriate scope. See L<perllexwarn> for more info about lexical
+warnings.
+
 =head1 CAVEAT
 
 =over 2
@@ -452,7 +464,7 @@
        return undef unless defined $DEV;  #  dangling symbolic link
     }
 
-    if ($full_check && $SLnkSeen{$DEV, $INO}++) {
+    if ($full_check && defined $DEV && $SLnkSeen{$DEV, $INO}++) {
        if ( ($follow_skip < 1) || ((-d _) && ($follow_skip < 2)) ) {
            die "$AbsName encountered a second time";
        }
@@ -542,7 +554,8 @@
                else {
                    $abs_dir = contract_name_Mac($cwd, $top_item);
                    unless (defined $abs_dir) {
-                       warn "Can't determine absolute path for $top_item (No such 
file or directory)\n" if $^W;
+                       warnings::warnif __PACKAGE__,
+                           "Can't determine absolute path for $top_item (No such file 
+or directory)\n";
                        next Proc_Top_Item;
                    }
                }
@@ -565,7 +578,8 @@
                    if (ref $dangling_symlinks eq 'CODE') {
                        $dangling_symlinks->($top_item, $cwd);
                    } else {
-                       warn "$top_item is a dangling symbolic link\n" if $^W;
+                       warnings::warnif __PACKAGE__,
+                           "$top_item is a dangling symbolic link\n";
                    }
                }
                next Proc_Top_Item;
@@ -579,7 +593,7 @@
        else { # no follow
            $topdir = $top_item;
            unless (defined $topnlink) {
-               warn "Can't stat $top_item: $!\n" if $^W;
+               warnings::warnif __PACKAGE__, "Can't stat $top_item: $!\n";
                next Proc_Top_Item;
            }
            if (-d _) {
@@ -616,7 +630,7 @@
            }
 
            unless ($no_chdir || chdir $abs_dir) {
-               warn "Couldn't chdir $abs_dir: $!\n" if $^W;
+               warnings::warnif __PACKAGE__, "Couldn't chdir $abs_dir: $!\n";
                next Proc_Top_Item;
            }
 
@@ -684,7 +698,7 @@
            }
        }
        unless (chdir $udir) {
-           warn "Can't cd to $udir: $!\n" if $^W;
+           warnings::warnif __PACKAGE__, "Can't cd to $udir: $!\n";
            return;
        }
     }
@@ -727,10 +741,13 @@
            }
            unless (chdir $udir) {
                if ($Is_MacOS) {
-                   warn "Can't cd to ($p_dir) $udir: $!\n" if $^W;
+                   warnings::warnif __PACKAGE__,
+                       "Can't cd to ($p_dir) $udir: $!\n";
                }
                else {
-                   warn "Can't cd to (" . ($p_dir ne '/' ? $p_dir : '') . "/) $udir: 
$!\n" if $^W;
+                   warnings::warnif __PACKAGE__,
+                       "Can't cd to (" . ($p_dir ne '/' ? $p_dir : '') .
+                       "/) $udir: $!\n";
                }
                next;
            }
@@ -745,7 +762,7 @@
 
        # Get the list of files in the current directory.
        unless (opendir DIR, ($no_chdir ? $dir_name : $File::Find::current_dir)) {
-           warn "Can't opendir($dir_name): $!\n" if $^W;
+           warnings::warnif __PACKAGE__, "Can't opendir($dir_name): $!\n";
            next;
        }
        @filenames = readdir DIR;
@@ -914,7 +931,7 @@
        }
        $ok = chdir($updir_loc) unless ($p_dir eq $File::Find::current_dir);
        unless ($ok) {
-           warn "Can't cd to $updir_loc: $!\n" if $^W;
+           warnings::warnif __PACKAGE__, "Can't cd to $updir_loc: $!\n";
            return;
        }
     }
@@ -931,7 +948,8 @@
            # change (back) to parent directory (always untainted)
            unless ($no_chdir) {
                unless (chdir $updir_loc) {
-                   warn "Can't cd to $updir_loc: $!\n" if $^W;
+                   warnings::warnif __PACKAGE__,
+                       "Can't cd to $updir_loc: $!\n";
                    next;
                }
            }
@@ -962,7 +980,7 @@
                }
            }
            unless (chdir $updir_loc) {
-               warn "Can't cd to $updir_loc: $!\n" if $^W;
+               warnings::warnif __PACKAGE__, "Can't cd to $updir_loc: $!\n";
                next;
            }
        }
@@ -975,7 +993,7 @@
 
        # Get the list of files in the current directory.
        unless (opendir DIR, ($no_chdir ? $dir_loc : $File::Find::current_dir)) {
-           warn "Can't opendir($dir_loc): $!\n" if $^W;
+           warnings::warnif __PACKAGE__, "Can't opendir($dir_loc): $!\n";
            next;
        }
        @filenames = readdir DIR;
@@ -1020,7 +1038,8 @@
            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 
-                       warn "Can't cd to $updir_loc: $!\n" if $^W;
+                       warnings::warnif __PACKAGE__,
+                           "Can't cd to $updir_loc: $!\n";
                        next;
                    }
                }

Reply via email to