class Metasm::ZIP::LocalHeader

zip file format:

local header 1

compressed data 1

local header 2

compressed data 2

central header 1
central header 2
end of central directory

Attributes

compressed_off[RW]
extra[RW]
fname[RW]

Public Class Methods

from_central(f) click to toggle source

return a new LocalHeader with all fields copied from a CentralHeader

# File metasm/exe_format/zip.rb, line 74
def self.from_central(f)
        l = new
        l.verneed = f.verneed
        l.flags = f.flags
        l.compress_method = f.compress_method
        l.mtime = f.mtime
        l.mdate = f.mdate
        l.crc32 = f.crc32
        l.compressed_sz = f.compressed_sz
        l.uncompressed_sz = f.uncompressed_sz
        l.fname = f.fname
        l.extra = f.extra
        l
end

Public Instance Methods

decode(zip) click to toggle source
Calls superclass method Metasm::SerialStruct#decode
# File metasm/exe_format/zip.rb, line 54
def decode(zip)
        super(zip)
        raise "Invalid ZIP signature #{@signature.to_s(16)}" if @signature != MAGIC_LOCALHEADER
        @fname = zip.encoded.read(@fname_len) if @fname_len > 0
        @extra = zip.encoded.read(@extra_len) if @extra_len > 0
        @compressed_off = zip.encoded.ptr
end
encode(zip) click to toggle source
Calls superclass method Metasm::SerialStruct#encode
# File metasm/exe_format/zip.rb, line 68
def encode(zip)
        ed = super(zip)
        ed << fname << extra
end
set_default_values(zip) click to toggle source
Calls superclass method Metasm::SerialStruct#set_default_values
# File metasm/exe_format/zip.rb, line 62
def set_default_values(zip)
        @fname_len = fname ? @fname.length : 0
        @extra_len = extra ? @extra.length : 0
        super(zip)
end