-
-#
-# Does a recursive find of $dir, filling in from the (filled dump)
-# directory $dirF. Handles the cases where $dir and $dirF might
-# or might not be mangled etc.
-#
-sub MergeFind
-{
- my($fh, $dir, $dirF) = @_;
-
- my(@Dir, $fLast);
- if ( -d $dir ) {
- TarWriteFile($fh, $dir, $Mangle, $Compress);
- } elsif ( -d $dirF ) {
- TarWriteFile($fh, $dirF, $MangleF, $CompressF);
- }
- if ( opendir(DIR, $dir) ) {
- @Dir = readdir(DIR);
- closedir(DIR);
- }
- if ( defined($NumF) && opendir(DIR, $dirF) ) {
- if ( $Mangle == $MangleF ) {
- @Dir = (@Dir, readdir(DIR));
- } else {
- foreach my $f ( readdir(DIR) ) {
- if ( $Mangle ) {
- push(@Dir, $bpc->fileNameMangle($f));
- } else {
- push(@Dir, $bpc->fileNameUnmangle($f));
- }
- }
- }
- }
- foreach my $f ( sort({$a cmp $b} @Dir) ) {
- next if ( $f eq "." || $f eq ".."
- || $f eq $fLast || ($Mangle && $f eq "attrib") );
- $fLast = $f;
- my($fF) = $f;
- if ( $Mangle != $MangleF ) {
- $fF = $Mangle ? $bpc->fileNameUnmangle($f)
- : $bpc->fileNameMangle($f);
- }
- if ( -e "$dir/$f" ) {
- if ( -d "$dir/$f" ) {
- MergeFind($fh, "$dir/$f", "$dirF/$fF");
- } else {
- TarWriteFile($fh, "$dir/$f", $Mangle, $Compress);
- }
- } elsif ( -e "$dirF/$fF" ) {
- if ( -d "$dirF/$fF" ) {
- MergeFind($fh, "$dir/$f", "$dirF/$fF");
- } else {
- TarWriteFile($fh, "$dirF/$fF", $MangleF, $CompressF);
- }
- } else {
- print(STDERR "$0: Botch on $dir, $dirF, $f, $fF\n");
- $ErrorCnt++;
- }
- }
-}