8 "github.com/anacrolix/torrent/metainfo"
16 func TorrentData(md *metainfo.Info, location string) data {
17 return data{md, location}
20 func (me data) ReadAt(p []byte, off int64) (n int, err error) {
21 for _, fi := range me.info.UpvertedFiles() {
27 if int64(n1) > fi.Length-off {
28 n1 = int(fi.Length - off)
31 f, err = os.Open(me.fileInfoName(fi))
35 n1, err = f.ReadAt(p[:n1], off)
50 func (me data) WriteAt(p []byte, off int64) (n int, err error) {
51 for _, fi := range me.info.UpvertedFiles() {
57 if int64(n1) > fi.Length-off {
58 n1 = int(fi.Length - off)
60 name := me.fileInfoName(fi)
61 os.MkdirAll(filepath.Dir(name), 0770)
63 f, err = os.OpenFile(name, os.O_WRONLY|os.O_CREATE, 0660)
67 n1, err = f.WriteAt(p[:n1], off)
82 func (me data) WriteSectionTo(w io.Writer, off, n int64) (written int64, err error) {
83 for _, fi := range me.info.UpvertedFiles() {
93 f, err = os.Open(me.fileInfoName(fi))
97 n1, err = io.Copy(w, io.NewSectionReader(f, off, n1))
112 func (me data) fileInfoName(fi metainfo.FileInfo) string {
113 return filepath.Join(append([]string{me.loc, me.info.Name}, fi.Path...)...)