Files
sqlite3/sqlite3vfs/vfs_api.go

72 lines
1.4 KiB
Go
Raw Normal View History

2023-05-17 14:04:00 +01:00
package sqlite3vfs
import "sync"
type VFS interface {
Open(name string, flags OpenFlag) (File, OpenFlag, error)
2023-05-18 01:34:54 +01:00
Delete(name string, syncDir bool) error
2023-05-17 14:04:00 +01:00
Access(name string, flags AccessFlag) (bool, error)
FullPathname(name string) (string, error)
}
type File interface {
Close() error
ReadAt(p []byte, off int64) (n int, err error)
WriteAt(p []byte, off int64) (n int, err error)
Truncate(size int64) error
2023-05-18 01:34:54 +01:00
Sync(flags SyncFlag) error
2023-05-17 14:04:00 +01:00
FileSize() (int64, error)
2023-05-18 01:34:54 +01:00
Lock(lock LockLevel) error
Unlock(lock LockLevel) error
2023-05-17 14:04:00 +01:00
CheckReservedLock() (bool, error)
2023-05-18 16:00:34 +01:00
SectorSize() int
2023-05-19 02:00:16 +01:00
DeviceCharacteristics() DeviceCharacteristic
}
type FileLockState interface {
File
LockState() LockLevel
}
type FileSizeHint interface {
File
SizeHint(size int64) error
}
type FileHasMoved interface {
File
HasMoved() (bool, error)
}
type FilePowersafeOverwrite interface {
File
PowersafeOverwrite() bool
SetPowersafeOverwrite(bool)
2023-05-17 14:04:00 +01:00
}
var (
vfsRegistry map[string]VFS
vfsRegistryMtx sync.Mutex
)
func Find(name string) VFS {
vfsRegistryMtx.Lock()
defer vfsRegistryMtx.Unlock()
return vfsRegistry[name]
}
func Register(name string, vfs VFS) {
vfsRegistryMtx.Lock()
defer vfsRegistryMtx.Unlock()
if vfsRegistry == nil {
vfsRegistry = map[string]VFS{}
}
vfsRegistry[name] = vfs
}
func Unregister(name string) {
vfsRegistryMtx.Lock()
defer vfsRegistryMtx.Unlock()
delete(vfsRegistry, name)
}