github.com/ncruces/go-sqlite3@v0.15.1-0.20240520133447-53eef1510ff0/vfs/registry.go (about) 1 package vfs 2 3 import "sync" 4 5 var ( 6 // +checklocks:vfsRegistryMtx 7 vfsRegistry map[string]VFS 8 vfsRegistryMtx sync.RWMutex 9 ) 10 11 // Find returns a VFS given its name. 12 // If there is no match, nil is returned. 13 // If name is empty, the default VFS is returned. 14 // 15 // https://sqlite.org/c3ref/vfs_find.html 16 func Find(name string) VFS { 17 if name == "" || name == "os" { 18 return vfsOS{} 19 } 20 vfsRegistryMtx.RLock() 21 defer vfsRegistryMtx.RUnlock() 22 return vfsRegistry[name] 23 } 24 25 // Register registers a VFS. 26 // Empty and "os" are reserved names. 27 // 28 // https://sqlite.org/c3ref/vfs_find.html 29 func Register(name string, vfs VFS) { 30 if name == "" || name == "os" { 31 return 32 } 33 vfsRegistryMtx.Lock() 34 defer vfsRegistryMtx.Unlock() 35 if vfsRegistry == nil { 36 vfsRegistry = map[string]VFS{} 37 } 38 vfsRegistry[name] = vfs 39 } 40 41 // Unregister unregisters a VFS. 42 // 43 // https://sqlite.org/c3ref/vfs_find.html 44 func Unregister(name string) { 45 vfsRegistryMtx.Lock() 46 defer vfsRegistryMtx.Unlock() 47 delete(vfsRegistry, name) 48 }