forked from mirror/pkger
Merge pull request #40 from devnode/fix-file-seek
missing File.reader initialization on Seek()
This commit is contained in:
commit
f548238cc7
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue