Improved error handling.

This commit is contained in:
Nuno Cruces
2023-05-23 12:38:29 +01:00
parent 336ba87d56
commit 2b3da350cc
3 changed files with 13 additions and 5 deletions

View File

@@ -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
)

View File

@@ -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

View File

@@ -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 {