Diff of /branches/2.6/cgi-bin/yabb2/Modules/Archive/Zip/DirectoryMember.pm [000000] .. [r1416] Maximize Restore

  Switch to side-by-side view

--- a
+++ b/branches/2.6/cgi-bin/yabb2/Modules/Archive/Zip/DirectoryMember.pm
@@ -0,0 +1,82 @@
+package Archive::Zip::DirectoryMember;
+
+use strict;
+use File::Path;
+
+use vars qw( $VERSION @ISA );
+
+BEGIN {
+    $VERSION = '1.23';
+    @ISA     = qw( Archive::Zip::Member );
+}
+
+use Archive::Zip qw(
+  :ERROR_CODES
+  :UTILITY_METHODS
+);
+
+sub _newNamed {
+    my $class    = shift;
+    my $fileName = shift;    # FS name
+    my $newName  = shift;    # Zip name
+    $newName = _asZipDirName($fileName) unless $newName;
+    my $self = $class->new(@_);
+    $self->{'externalFileName'} = $fileName;
+    $self->fileName($newName);
+
+    if ( -e $fileName ) {
+
+        # -e does NOT do a full stat, so we need to do one now
+        if ( -d _ ) {
+            my @stat = stat(_);
+            $self->unixFileAttributes( $stat[2] );
+            my $mod_t = $stat[9];
+            if ( $^O eq 'MSWin32' and !$mod_t ) {
+                $mod_t = time();
+            }
+            $self->setLastModFileDateTimeFromUnix($mod_t);
+
+        }
+        else {    # hmm.. trying to add a non-directory?
+            _error( $fileName, ' exists but is not a directory' );
+            return undef;
+        }
+    }
+    else {
+        $self->unixFileAttributes( $self->DEFAULT_DIRECTORY_PERMISSIONS );
+        $self->setLastModFileDateTimeFromUnix( time() );
+    }
+    return $self;
+}
+
+sub externalFileName {
+    shift->{'externalFileName'};
+}
+
+sub isDirectory {
+    return 1;
+}
+
+sub extractToFileNamed {
+    my $self    = shift;
+    my $name    = shift;                                 # local FS name
+    my $attribs = $self->unixFileAttributes() & 07777;
+    mkpath( $name, 0, $attribs );                        # croaks on error
+    utime( $self->lastModTime(), $self->lastModTime(), $name );
+    return AZ_OK;
+}
+
+sub fileName {
+    my $self    = shift;
+    my $newName = shift;
+    $newName =~ s{/?$}{/} if defined($newName);
+    return $self->SUPER::fileName($newName);
+}
+
+# So people don't get too confused. This way it looks like the problem
+# is in their code...
+sub contents {
+    return wantarray ? ( undef, AZ_OK ) : undef;
+}
+
+1;