Maintenance Ruby 3.4 gets fixes, but no new features. Switch to Ruby 4.0 →
instance method
Gem::Package::TarReader::Entry#seek
seek(offset, whence = IO::SEEK_SET)
lib/rubygems/package/tar_reader/entry.rb
View on GitHub ↗
# File tmp/rubies/ruby-3.4.1/lib/rubygems/package/tar_reader/entry.rb, line 188
def seek(offset, whence = IO::SEEK_SET)
check_closed
new_pos =
case whence
when IO::SEEK_SET then @orig_pos + offset
when IO::SEEK_CUR then @io.pos + offset
when IO::SEEK_END then @end_pos + offset
else
raise ArgumentError, "invalid whence"
end
if new_pos < @orig_pos
new_pos = @orig_pos
elsif new_pos > @end_pos
new_pos = @end_pos
end
pending = new_pos - @io.pos
return 0 if pending == 0
if @io.respond_to?(:seek)
begin
# avoid reading if the @io supports seeking
@io.seek new_pos, IO::SEEK_SET
pending = 0
rescue Errno::EINVAL
end
end
# if seeking isn't supported or failed
# negative seek requires that we rewind and read
if pending < 0
@io.rewind
pending = new_pos
end
while pending > 0 do
size_read = @io.read([pending, 4096].min)&.size
raise(EOFError, "end of file reached") if size_read.nil?
pending -= size_read
end
@read = @io.pos - @orig_pos
0
end
Seeks to offset bytes into the tar file entry whence can be IO::SEEK_SET, IO::SEEK_CUR, or IO::SEEK_END