<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">package Archive::Zip::NewFileMember;

use strict;
use vars qw( $VERSION @ISA );

BEGIN {
    $VERSION = '1.68';
    @ISA     = qw ( Archive::Zip::FileMember );
}

use Archive::Zip qw(
  :CONSTANTS
  :ERROR_CODES
  :UTILITY_METHODS
);

# Given a file name, set up for eventual writing.
sub _newFromFileNamed {
    my $class    = shift;
    my $fileName = shift;    # local FS format
    my $newName  = shift;
    $newName = _asZipDirName($fileName) unless defined($newName);
    return undef unless (stat($fileName) &amp;&amp; -r _ &amp;&amp; !-d _ );
    my $self = $class-&gt;new(@_);
    $self-&gt;{'fileName'}          = $newName;
    $self-&gt;{'externalFileName'}  = $fileName;
    $self-&gt;{'compressionMethod'} = COMPRESSION_STORED;
    my @stat = stat(_);
    $self-&gt;{'compressedSize'} = $self-&gt;{'uncompressedSize'} = $stat[7];
    $self-&gt;desiredCompressionMethod(
        ($self-&gt;compressedSize() &gt; 0)
        ? COMPRESSION_DEFLATED
        : COMPRESSION_STORED
    );
    $self-&gt;unixFileAttributes($stat[2]);
    $self-&gt;setLastModFileDateTimeFromUnix($stat[9]);
    $self-&gt;isTextFile(-T _ );
    return $self;
}

sub rewindData {
    my $self = shift;

    my $status = $self-&gt;SUPER::rewindData(@_);
    return $status unless $status == AZ_OK;

    return AZ_IO_ERROR unless $self-&gt;fh();
    $self-&gt;fh()-&gt;clearerr();
    $self-&gt;fh()-&gt;seek(0, IO::Seekable::SEEK_SET)
      or return _ioError("rewinding", $self-&gt;externalFileName());
    return AZ_OK;
}

# Return bytes read. Note that first parameter is a ref to a buffer.
# my $data;
# my ( $bytesRead, $status) = $self-&gt;readRawChunk( \$data, $chunkSize );
sub _readRawChunk {
    my ($self, $dataRef, $chunkSize) = @_;
    return (0, AZ_OK) unless $chunkSize;
    my $bytesRead = $self-&gt;fh()-&gt;read($$dataRef, $chunkSize)
      or return (0, _ioError("reading data"));
    return ($bytesRead, AZ_OK);
}

# If I already exist, extraction is a no-op.
sub extractToFileNamed {
    my $self = shift;
    my $name = shift;    # local FS name
    if (File::Spec-&gt;rel2abs($name) eq
        File::Spec-&gt;rel2abs($self-&gt;externalFileName()) and -r $name) {
        return AZ_OK;
    } else {
        return $self-&gt;SUPER::extractToFileNamed($name, @_);
    }
}

1;
</pre></body></html>