# # Find::File patch -- preserve directory traversal order! # # As it stands directories are traversed in the oppisite order that is # expected. Even the UNIX find program traverses directories in the correct # order, it imposes (EG: sorted). # # Modified to ensure sub-directory traversal order is not inverted by stack # push. That is remains in the same order as user pre-processing, or order # returned by readdir(), which is generally sorted. # *** File/Find.pm.orig Sat Mar 22 14:05:47 2003 --- File/Find.pm Sat Mar 22 14:27:43 2003 *************** *** 500,505 **** --- 506,516 ---- # This dir has subdirectories. $subcount = $nlink - 2; + # HACK: insert directories at this position. so as to preserve + # the user pre-processed ordering of files. + # EG: directory traversal is in user sorted order, not inverted. + my $stack_top = @Stack; + for my $FN (@filenames) { next if $FN =~ /^\.{1,2}\z/; if ($subcount > 0 || $avoid_nlink) { *************** *** 511,517 **** if (-d _) { --$subcount; $FN =~ s/\.dir\z// if $Is_VMS; ! push @Stack,[$CdLvl,$dir_name,$FN,$sub_nlink]; } else { $name = $dir_pref . $FN; --- 522,531 ---- if (-d _) { --$subcount; $FN =~ s/\.dir\z// if $Is_VMS; ! # HACK: replace push to preserve dir traversal order ! #push @Stack,[$CdLvl,$dir_name,$FN,$sub_nlink]; ! splice @Stack, $stack_top, 0, ! [$CdLvl,$dir_name,$FN,$sub_nlink]; } else { $name = $dir_pref . $FN;