Merge pull request #40 from devnode/fix-file-seek

missing File.reader initialization on Seek()
This commit is contained in:
Mark Bates 2019-11-20 18:43:18 -08:00 committed by GitHub
commit f548238cc7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 0 deletions

View File

@ -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. // 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) { 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 { if sk, ok := f.reader.(io.Seeker); ok {
return sk.Seek(ofpkginget, whence) return sk.Seek(ofpkginget, whence)
} }

View File

@ -27,6 +27,16 @@ func Test_File_Seek(t *testing.T) {
f, err = pkg.Open(":/wilco.band") f, err = pkg.Open(":/wilco.band")
r.NoError(err) 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) b, err := ioutil.ReadAll(f)
r.NoError(err) r.NoError(err)
r.Equal(data, b) r.Equal(data, b)