start main of ZipExtraField < Hash
# File lib/zip/zip_extra_field.rb, line 130 def initialize(binstr = nil) binstr and merge(binstr) end
# File lib/zip/zip_extra_field.rb, line 198 def c_dir_length to_c_dir_bin.bytesize end
# File lib/zip/zip_extra_field.rb, line 167 def create(name) field_class = nil ID_MAP.each { |id, klass| if klass.name == name field_class = klass break end } if ! field_class raise ZipError, "Unknown extra field '#{name}'" end self[name] = field_class.new() end
# File lib/zip/zip_extra_field.rb, line 201 def local_length to_local_bin.bytesize end
# File lib/zip/zip_extra_field.rb, line 134 def merge(binstr) return if binstr.empty? i = 0 while i < binstr.bytesize id = binstr[i,2] len = binstr[i + 2,2].to_s.unpack("v")[0] if id && ID_MAP.member?(id) field_name = ID_MAP[id].name if self.member?(field_name) self[field_name].mergea(binstr[i, len + 4]) else field_obj = ID_MAP[id].new(binstr[i, len + 4]) self[field_name] = field_obj end elsif id unless self["Unknown"] s = "" class << s alias_method :to_c_dir_bin, :to_s alias_method :to_local_bin, :to_s end self["Unknown"] = s end if !len || len + 4 > binstr[i..-1].bytesize self["Unknown"] << binstr[i..-1] break end self["Unknown"] << binstr[i, len + 4] end i += len + 4 end end
# File lib/zip/zip_extra_field.rb, line 190 def to_c_dir_bin s = "" each do |k, v| s << v.to_c_dir_bin end s end
# File lib/zip/zip_extra_field.rb, line 181 def to_local_bin s = "" each do |k, v| s << v.to_local_bin end s end