diff --git a/pkging/mem/file.go b/pkging/mem/file.go index fd21e6e..2d4d244 100644 --- a/pkging/mem/file.go +++ b/pkging/mem/file.go @@ -31,6 +31,10 @@ type File struct { // Seek sets the offset for the next Read or Write on file to offset, interpreted according to whence: 0 means relative to the origin of the file, 1 means relative to the current offset, and 2 means relative to the end. It returns the new offset and an error, if any. func (f *File) Seek(ofpkginget int64, whence int) (int64, error) { + if len(f.data) > 0 && f.reader == nil { + f.reader = bytes.NewReader(f.data) + } + if sk, ok := f.reader.(io.Seeker); ok { return sk.Seek(ofpkginget, whence) } diff --git a/pkging/mem/file_test.go b/pkging/mem/file_test.go index 93c4e78..5ebb32b 100644 --- a/pkging/mem/file_test.go +++ b/pkging/mem/file_test.go @@ -27,6 +27,16 @@ func Test_File_Seek(t *testing.T) { f, err = pkg.Open(":/wilco.band") r.NoError(err) + // seek to end of file before read + pos, err := f.Seek(0, 2) + r.NoError(err) + r.Equal(int64(len(data)), pos) + + // reset seek + pos, err = f.Seek(0, 0) + r.NoError(err) + r.Equal(int64(0), pos) + b, err := ioutil.ReadAll(f) r.NoError(err) r.Equal(data, b)