From 2b3da350cc8eb5f379fcc101138104f48a9584d6 Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Tue, 23 May 2023 12:38:29 +0100 Subject: [PATCH] Improved error handling. --- sqlite3vfs/const.go | 1 + sqlite3vfs/vfs_file.go | 15 +++++++++++---- sqlite3vfs/vfs_test.go | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/sqlite3vfs/const.go b/sqlite3vfs/const.go index 866a97e..8b9d270 100644 --- a/sqlite3vfs/const.go +++ b/sqlite3vfs/const.go @@ -39,6 +39,7 @@ const ( _IOERR_SEEK _ErrorCode = util.IOERR_SEEK _IOERR_DELETE_NOENT _ErrorCode = util.IOERR_DELETE_NOENT _CANTOPEN_FULLPATH _ErrorCode = util.CANTOPEN_FULLPATH + _CANTOPEN_ISDIR _ErrorCode = util.CANTOPEN_ISDIR _OK_SYMLINK _ErrorCode = util.OK_SYMLINK ) diff --git a/sqlite3vfs/vfs_file.go b/sqlite3vfs/vfs_file.go index d9ee18b..15ee9f0 100644 --- a/sqlite3vfs/vfs_file.go +++ b/sqlite3vfs/vfs_file.go @@ -8,6 +8,7 @@ import ( "os" "path/filepath" "runtime" + "syscall" "time" "github.com/ncruces/go-sqlite3/internal/util" @@ -36,10 +37,10 @@ func (vfsOS) FullPathname(path string) (string, error) { func (vfsOS) Delete(path string, syncDir bool) error { err := os.Remove(path) - if errors.Is(err, fs.ErrNotExist) { - return _IOERR_DELETE_NOENT - } if err != nil { + if errors.Is(err, fs.ErrNotExist) { + return _IOERR_DELETE_NOENT + } return err } if runtime.GOOS != "windows" && syncDir { @@ -93,6 +94,9 @@ func (vfsOS) Open(name string, flags OpenFlag) (File, OpenFlag, error) { f, err = osOpenFile(name, oflags, 0666) } if err != nil { + if errors.Is(err, syscall.EISDIR) { + return nil, flags, _CANTOPEN_ISDIR + } return nil, flags, err } @@ -212,7 +216,10 @@ func (f *vfsFile) HasMoved() (bool, error) { return false, err } pi, err := os.Stat(f.Name()) - if err != nil && !errors.Is(err, fs.ErrNotExist) { + if err != nil { + if errors.Is(err, fs.ErrNotExist) { + return true, nil + } return false, err } return !os.SameFile(fi, pi), nil diff --git a/sqlite3vfs/vfs_test.go b/sqlite3vfs/vfs_test.go index a606930..d794451 100644 --- a/sqlite3vfs/vfs_test.go +++ b/sqlite3vfs/vfs_test.go @@ -168,7 +168,7 @@ func Test_vfsDelete(t *testing.T) { func Test_vfsAccess(t *testing.T) { dir := t.TempDir() - file := filepath.Join(t.TempDir(), "test.db") + file := filepath.Join(dir, "test.db") if f, err := os.Create(file); err != nil { t.Fatal(err) } else {