2
0
mirror of synced 2025-02-24 06:38:14 +00:00
torrent/fs/filenode.go
Matt Joiner 7d55f573f5 Maintain a torrent.Reader for each file handle
This means that readahead will work much better. Addresses https://github.com/anacrolix/torrent/issues/182.
2017-08-28 01:42:02 +10:00

32 lines
574 B
Go

package torrentfs
import (
"os"
"bazil.org/fuse"
fusefs "bazil.org/fuse/fs"
"golang.org/x/net/context"
)
type fileNode struct {
node
size uint64
TorrentOffset int64
}
var (
_ fusefs.NodeOpener = fileNode{}
)
func (fn fileNode) Attr(ctx context.Context, attr *fuse.Attr) error {
attr.Size = fn.size
attr.Mode = defaultMode
return nil
}
func (fn fileNode) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fusefs.Handle, error) {
r := fn.t.NewReader()
r.Seek(fn.TorrentOffset, os.SEEK_SET)
return fileHandle{fn, r}, nil
}