start main of ZipExtraField < Hash
# File lib/zip/zip.rb, line 1767 def initialize(binstr = nil) binstr and merge(binstr) end
# File lib/zip/zip.rb, line 1835 def c_dir_length to_c_dir_bin.length end
# File lib/zip/zip.rb, line 1804 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.rb, line 1838 def local_length to_local_bin.length end
# File lib/zip/zip.rb, line 1771 def merge(binstr) binstr == "" and return i = 0 while i < binstr.length 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].length self["Unknown"] << binstr[i..-1] break; end self["Unknown"] << binstr[i, len+4] end i += len+4 end end
# File lib/zip/zip.rb, line 1827 def to_c_dir_bin s = "" each { |k, v| s << v.to_c_dir_bin } s end
# File lib/zip/zip.rb, line 1818 def to_local_bin s = "" each { |k, v| s << v.to_local_bin } s end