aboutsummaryrefslogtreecommitdiff
path: root/meta/info.go
diff options
context:
space:
mode:
Diffstat (limited to 'meta/info.go')
-rw-r--r--meta/info.go11
1 files changed, 10 insertions, 1 deletions
diff --git a/meta/info.go b/meta/info.go
index 5ec35a7..d4b19bc 100644
--- a/meta/info.go
+++ b/meta/info.go
@@ -41,6 +41,13 @@ func (i Info) TotalLength() int64 {
return i.Length
}
+func (i Info) FileLength(n int) int64 {
+ if len(i.Files) == 0 {
+ return i.Length
+ }
+ return i.Files[n].Length
+}
+
func (i Info) GetPieces() []Piece {
n, last := i.Full(), i.Last()
if last > 0 {
@@ -122,8 +129,9 @@ func (i Info) ReadAt(b []byte, off int64) (n int, err error) {
}
defer fd.Close()
- flen := i.Files[n].Length
+ flen := i.FileLength(n)
+ // does it fit?
if int64(len(b))+foff <= flen {
return fd.ReadAt(b, foff)
}
@@ -135,6 +143,7 @@ func (i Info) ReadAt(b []byte, off int64) (n int, err error) {
return done, err
}
next, err := i.ReadAt(b[end:], end)
+
return done + next, err
}