diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2020-08-21 11:31:03 +0300 |
---|---|---|
committer | Kamil Trzciński <ayufan@ayufan.eu> | 2020-08-21 11:32:13 +0300 |
commit | 52f4fac230f4a702a53dac3a711c0693bc104a6c (patch) | |
tree | 6e58cc0800cf8e30c45ac83b41a25bd76c939fee | |
parent | c205fde879d5e5cd6ff97fdccdc097e7128a67cc (diff) |
Use `Seek` for cached requestszip-supports-range-requests
-rw-r--r-- | internal/vfs/zip/http_range/http_read_at.go | 8 | ||||
-rw-r--r-- | internal/vfs/zip/http_range/http_reader.go | 17 |
2 files changed, 4 insertions, 21 deletions
diff --git a/internal/vfs/zip/http_range/http_read_at.go b/internal/vfs/zip/http_range/http_read_at.go index a819fe2a..9bbf13da 100644 --- a/internal/vfs/zip/http_range/http_read_at.go +++ b/internal/vfs/zip/http_range/http_read_at.go @@ -9,10 +9,10 @@ type ReadAtReader struct { cachedReader *Reader } -func (h *ReadAtReader) cachedRead(p []byte, off int64) (n int, err error) { - if !h.cachedReader.CanRead(off, int64(len(p))) { - h.cachedReader.Close() - h.cachedReader = NewReader(h.R, off, h.R.Size-off) +func (h *ReadAtReader) cachedRead(p []byte, off int64) (int, error) { + _, err := h.cachedReader.Seek(off, io.SeekStart) + if err != nil { + return 0, err } return io.ReadFull(h.cachedReader, p) diff --git a/internal/vfs/zip/http_range/http_reader.go b/internal/vfs/zip/http_range/http_reader.go index 4855aba1..cb1ecfab 100644 --- a/internal/vfs/zip/http_range/http_reader.go +++ b/internal/vfs/zip/http_range/http_reader.go @@ -140,23 +140,6 @@ func (h *Reader) Seek(offset int64, whence int) (int64, error) { return newOffset - h.rangeStart, nil } -// CanRead checks if a given data can be read from the current offset -func (h *Reader) CanRead(offset, n int64) bool { - if offset < 0 || n < 0 { - return false - } - - if h.offset != offset { - return false - } - - if offset+n >= h.rangeStart+h.rangeSize { - return false - } - - return true -} - // Read reads a data into a given buffer func (h *Reader) Read(p []byte) (int, error) { if len(p) == 0 { |