mirror of
https://github.com/PeernetOfficial/Abstraction.git
synced 2026-07-20 12:27:51 +01:00
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package fs
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
// Sub returns a new file system rooted at dir.
|
|
func Sub(fsys FileSystem, dir string) FileSystem {
|
|
return &subFS{
|
|
fsys: fsys,
|
|
root: dir,
|
|
}
|
|
}
|
|
|
|
type subFS struct {
|
|
fsys FileSystem
|
|
root string
|
|
}
|
|
|
|
func (fs *subFS) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
|
|
subName := filepath.Join(fs.root, name)
|
|
return fs.fsys.OpenFile(subName, flag, perm)
|
|
}
|
|
|
|
func (fs *subFS) Stat(name string) (os.FileInfo, error) {
|
|
subName := filepath.Join(fs.root, name)
|
|
return fs.fsys.Stat(subName)
|
|
}
|
|
|
|
func (fs *subFS) Remove(name string) error {
|
|
subName := filepath.Join(fs.root, name)
|
|
return fs.fsys.Remove(subName)
|
|
}
|
|
|
|
func (fs *subFS) Rename(oldpath, newpath string) error {
|
|
subOldpath := filepath.Join(fs.root, oldpath)
|
|
subNewpath := filepath.Join(fs.root, newpath)
|
|
return fs.fsys.Rename(subOldpath, subNewpath)
|
|
}
|
|
|
|
func (fs *subFS) ReadDir(name string) ([]os.FileInfo, error) {
|
|
subName := filepath.Join(fs.root, name)
|
|
return fs.fsys.ReadDir(subName)
|
|
}
|
|
|
|
func (fs *subFS) CreateLockFile(name string, perm os.FileMode) (LockFile, bool, error) {
|
|
subName := filepath.Join(fs.root, name)
|
|
return fs.fsys.CreateLockFile(subName, perm)
|
|
}
|
|
|
|
var _ FileSystem = &subFS{}
|