summaryrefslogtreecommitdiff
path: root/vendor/github.com/ncruces/go-sqlite3/vfs/file.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/ncruces/go-sqlite3/vfs/file.go')
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/vfs/file.go24
1 files changed, 15 insertions, 9 deletions
diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/file.go b/vendor/github.com/ncruces/go-sqlite3/vfs/file.go
index 65409823c..8e65ca660 100644
--- a/vendor/github.com/ncruces/go-sqlite3/vfs/file.go
+++ b/vendor/github.com/ncruces/go-sqlite3/vfs/file.go
@@ -13,22 +13,28 @@ import (
type vfsOS struct{}
func (vfsOS) FullPathname(path string) (string, error) {
- path, err := filepath.Abs(path)
+ link, err := evalSymlinks(path)
if err != nil {
return "", err
}
- return path, testSymlinks(filepath.Dir(path))
+ full, err := filepath.Abs(link)
+ if err == nil && link != path {
+ err = _OK_SYMLINK
+ }
+ return full, err
}
-func testSymlinks(path string) error {
- p, err := filepath.EvalSymlinks(path)
- if err != nil {
- return err
+func evalSymlinks(path string) (string, error) {
+ var file string
+ _, err := os.Lstat(path)
+ if errors.Is(err, fs.ErrNotExist) {
+ path, file = filepath.Split(path)
}
- if p != path {
- return _OK_SYMLINK
+ path, err = filepath.EvalSymlinks(path)
+ if err != nil {
+ return "", err
}
- return nil
+ return filepath.Join(path, file), nil
}
func (vfsOS) Delete(path string, syncDir bool) error {