| 1234567891011121314151617181920212223242526272829303132333435363738 |
- package storage
- import (
- "os"
- "path/filepath"
- "strings"
- "github.com/anacrolix/torrent/metainfo"
- )
- // Determines the filepath to be used for each file in a torrent.
- type FilePathMaker func(opts FilePathMakerOpts) string
- // Determines the directory for a given torrent within a storage client.
- type TorrentDirFilePathMaker func(baseDir string, info *metainfo.Info, infoHash metainfo.Hash) string
- // Info passed to a FilePathMaker.
- type FilePathMakerOpts struct {
- Info *metainfo.Info
- File *metainfo.FileInfo
- }
- // defaultPathMaker just returns the storage client's base directory.
- func defaultPathMaker(baseDir string, info *metainfo.Info, infoHash metainfo.Hash) string {
- return baseDir
- }
- func infoHashPathMaker(baseDir string, info *metainfo.Info, infoHash metainfo.Hash) string {
- return filepath.Join(baseDir, infoHash.HexString())
- }
- func isSubFilepath(base, sub string) bool {
- rel, err := filepath.Rel(base, sub)
- if err != nil {
- return false
- }
- return rel != ".." && !strings.HasPrefix(rel, ".."+string(os.PathSeparator))
- }
|