summaryrefslogtreecommitdiff
path: root/vendor/github.com/ncruces/go-sqlite3/vfs/registry.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/ncruces/go-sqlite3/vfs/registry.go')
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/vfs/registry.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/registry.go b/vendor/github.com/ncruces/go-sqlite3/vfs/registry.go
new file mode 100644
index 000000000..42a2106fb
--- /dev/null
+++ b/vendor/github.com/ncruces/go-sqlite3/vfs/registry.go
@@ -0,0 +1,48 @@
+package vfs
+
+import "sync"
+
+var (
+ // +checklocks:vfsRegistryMtx
+ vfsRegistry map[string]VFS
+ vfsRegistryMtx sync.RWMutex
+)
+
+// Find returns a VFS given its name.
+// If there is no match, nil is returned.
+// If name is empty, the default VFS is returned.
+//
+// https://sqlite.org/c3ref/vfs_find.html
+func Find(name string) VFS {
+ if name == "" || name == "os" {
+ return vfsOS{}
+ }
+ vfsRegistryMtx.RLock()
+ defer vfsRegistryMtx.RUnlock()
+ return vfsRegistry[name]
+}
+
+// Register registers a VFS.
+// Empty and "os" are reserved names.
+//
+// https://sqlite.org/c3ref/vfs_find.html
+func Register(name string, vfs VFS) {
+ if name == "" || name == "os" {
+ return
+ }
+ vfsRegistryMtx.Lock()
+ defer vfsRegistryMtx.Unlock()
+ if vfsRegistry == nil {
+ vfsRegistry = map[string]VFS{}
+ }
+ vfsRegistry[name] = vfs
+}
+
+// Unregister unregisters a VFS.
+//
+// https://sqlite.org/c3ref/vfs_find.html
+func Unregister(name string) {
+ vfsRegistryMtx.Lock()
+ defer vfsRegistryMtx.Unlock()
+ delete(vfsRegistry, name)
+}