from (Gem::Package::TarHeader)

    # File lib/rubygems/package/tar_header.rb, line 98
      def self.from(stream)
        header = stream.read 512
        empty = (header == "\0" * 512)

        fields = header.unpack UNPACK_FORMAT

        name     = fields.shift
        mode     = fields.shift.oct
        uid      = fields.shift.oct
        gid      = fields.shift.oct
        size     = fields.shift.oct
        mtime    = fields.shift.oct
        checksum = fields.shift.oct
        typeflag = fields.shift
        linkname = fields.shift
        magic    = fields.shift
        version  = fields.shift.oct
        uname    = fields.shift
        gname    = fields.shift
        devmajor = fields.shift.oct
        devminor = fields.shift.oct
        prefix   = fields.shift

        new :name     => name,
            :mode     => mode,
            :uid      => uid,
            :gid      => gid,
            :size     => size,
            :mtime    => mtime,
            :checksum => checksum,
            :typeflag => typeflag,
            :linkname => linkname,
            :magic    => magic,
            :version  => version,
            :uname    => uname,
            :gname    => gname,
            :devmajor => devmajor,
            :devminor => devminor,
            :prefix   => prefix,

            :empty    => empty

        # HACK unfactor for Rubinius
        #new :name     => fields.shift,
        #    :mode     => fields.shift.oct,
        #    :uid      => fields.shift.oct,
        #    :gid      => fields.shift.oct,
        #    :size     => fields.shift.oct,
        #    :mtime    => fields.shift.oct,
        #    :checksum => fields.shift.oct,
        #    :typeflag => fields.shift,
        #    :linkname => fields.shift,
        #    :magic    => fields.shift,
        #    :version  => fields.shift.oct,
        #    :uname    => fields.shift,
        #    :gname    => fields.shift,
        #    :devmajor => fields.shift.oct,
        #    :devminor => fields.shift.oct,
        #    :prefix   => fields.shift,

        #    :empty => empty
      end