From 011051c0cb5efc50a83a0967725bd9ba196fc4cd Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 12 Jul 2016 20:31:44 +0200 Subject: Simplify ReadAt --- meta/info.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'meta/info.go') diff --git a/meta/info.go b/meta/info.go index 4b3d28a..251bc22 100644 --- a/meta/info.go +++ b/meta/info.go @@ -130,7 +130,7 @@ func (i Info) WriteAt(b []byte, off int64) (n int, err error) { // FIXME ReadAt ... func (i Info) ReadAt(b []byte, off int64) (n int, err error) { - if off >= i.TotalLength() { + if len(b) == 0 || off >= i.TotalLength() { return 0, nil } n, foff := i.findFirstFile(off) @@ -141,19 +141,20 @@ func (i Info) ReadAt(b []byte, off int64) (n int, err error) { } defer fd.Close() - flen := i.FileLength(n) - - // does it fit? read ahead - if int64(len(b))+foff < flen { - return fd.ReadAt(b, foff) + end := i.FileLength(n) - foff + if blen := int64(len(b)); end > blen { + end = blen } - end := flen - foff done, err := fd.ReadAt(b[:end], foff) if err != nil { - return done, err + return 0, err } + next, err := i.ReadAt(b[end:], off+end) + if err != nil { + return 0, err + } return done + next, err } -- cgit v1.2.3