8 "github.com/anacrolix/torrent/metainfo"
17 func TorrentData(md *metainfo.Info, location string) data {
18 return data{md, location, make([]bool, md.NumPieces())}
21 func (me data) Close() {}
23 func (me data) PieceComplete(piece int) bool {
24 return me.completed[piece]
27 func (me data) PieceCompleted(piece int) error {
28 me.completed[piece] = true
32 func (me data) ReadAt(p []byte, off int64) (n int, err error) {
33 for _, fi := range me.info.UpvertedFiles() {
39 if int64(n1) > fi.Length-off {
40 n1 = int(fi.Length - off)
43 f, err = os.Open(me.fileInfoName(fi))
44 if os.IsNotExist(err) {
45 err = io.ErrUnexpectedEOF
50 n1, err = f.ReadAt(p[:n1], off)
66 func (me data) WriteAt(p []byte, off int64) (n int, err error) {
67 for _, fi := range me.info.UpvertedFiles() {
73 if int64(n1) > fi.Length-off {
74 n1 = int(fi.Length - off)
76 name := me.fileInfoName(fi)
77 os.MkdirAll(filepath.Dir(name), 0770)
79 f, err = os.OpenFile(name, os.O_WRONLY|os.O_CREATE, 0660)
83 n1, err = f.WriteAt(p[:n1], off)
98 func (me data) fileInfoName(fi metainfo.FileInfo) string {
99 return filepath.Join(append([]string{me.loc, me.info.Name}, fi.Path...)...)