# File lib/rubygems/package.rb, line 441 def each_entry loop do return if @io.eof? header = TarHeader.new_from_stream(@io) return if header.empty? entry = Entry.new header, @io size = entry.size yield entry skip = (512 - (size % 512)) % 512 #if @io.respond_to? :seek # # avoid reading... # @io.seek(size - entry.bytes_read, IO::SEEK_CUR) #else pending = size - entry.bytes_read while pending > 0 bread = @io.read([pending, 4096].min).size raise UnexpectedEOF if @io.eof? pending -= bread end #end @io.read(skip) # discard trailing zeros # make sure nobody can use #read, #getc or #rewind anymore entry.close end end