mirror of
https://github.com/PeernetOfficial/Abstraction.git
synced 2026-07-20 20:37:53 +01:00
65 lines
1.2 KiB
Go
65 lines
1.2 KiB
Go
package fs
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
)
|
|
|
|
type osFS struct{}
|
|
|
|
// OS is a file system backed by the os package.
|
|
var OS FileSystem = &osFS{}
|
|
|
|
func (fs *osFS) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
|
|
f, err := os.OpenFile(name, flag, perm)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &osFile{File: f}, nil
|
|
}
|
|
|
|
func (fs *osFS) CreateLockFile(name string, perm os.FileMode) (LockFile, bool, error) {
|
|
return createLockFile(name, perm)
|
|
}
|
|
|
|
func (fs *osFS) Stat(name string) (os.FileInfo, error) {
|
|
return os.Stat(name)
|
|
}
|
|
|
|
func (fs *osFS) Remove(name string) error {
|
|
return os.Remove(name)
|
|
}
|
|
|
|
func (fs *osFS) Rename(oldpath, newpath string) error {
|
|
return os.Rename(oldpath, newpath)
|
|
}
|
|
|
|
func (fs *osFS) ReadDir(name string) ([]os.FileInfo, error) {
|
|
return ioutil.ReadDir(name)
|
|
}
|
|
|
|
type osFile struct {
|
|
*os.File
|
|
}
|
|
|
|
func (f *osFile) Slice(start int64, end int64) ([]byte, error) {
|
|
buf := make([]byte, end-start)
|
|
_, err := f.ReadAt(buf, start)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return buf, nil
|
|
}
|
|
|
|
type osLockFile struct {
|
|
*os.File
|
|
path string
|
|
}
|
|
|
|
func (f *osLockFile) Unlock() error {
|
|
if err := os.Remove(f.path); err != nil {
|
|
return err
|
|
}
|
|
return f.Close()
|
|
}
|