vfs: use os package errors where possible

This commit is contained in:
Nick Craig-Wood 2017-10-28 20:16:03 +01:00
parent c1aaff220d
commit 1a8f824bad
3 changed files with 41 additions and 42 deletions

View file

@ -632,24 +632,21 @@ func translateError(err error) (errc int) {
if err == nil { if err == nil {
return 0 return 0
} }
cause := errors.Cause(err) switch errors.Cause(err) {
if mErr, ok := cause.(vfs.Error); ok { case vfs.OK:
switch mErr { return 0
case vfs.OK: case vfs.ENOENT:
return 0 return -fuse.ENOENT
case vfs.ENOENT: case vfs.ENOTEMPTY:
return -fuse.ENOENT return -fuse.ENOTEMPTY
case vfs.ENOTEMPTY: case vfs.EEXIST:
return -fuse.ENOTEMPTY return -fuse.EEXIST
case vfs.EEXIST: case vfs.ESPIPE:
return -fuse.EEXIST return -fuse.ESPIPE
case vfs.ESPIPE: case vfs.EBADF:
return -fuse.ESPIPE return -fuse.EBADF
case vfs.EBADF: case vfs.EROFS:
return -fuse.EBADF return -fuse.EROFS
case vfs.EROFS:
return -fuse.EROFS
}
} }
fs.Errorf(nil, "IO error: %v", err) fs.Errorf(nil, "IO error: %v", err)
return -fuse.EIO return -fuse.EIO

View file

@ -68,24 +68,21 @@ func translateError(err error) error {
if err == nil { if err == nil {
return nil return nil
} }
cause := errors.Cause(err) switch errors.Cause(err) {
if mErr, ok := cause.(vfs.Error); ok { case vfs.OK:
switch mErr { return nil
case vfs.OK: case vfs.ENOENT:
return nil return fuse.ENOENT
case vfs.ENOENT: case vfs.ENOTEMPTY:
return fuse.ENOENT return fuse.Errno(syscall.ENOTEMPTY)
case vfs.ENOTEMPTY: case vfs.EEXIST:
return fuse.Errno(syscall.ENOTEMPTY) return fuse.EEXIST
case vfs.EEXIST: case vfs.ESPIPE:
return fuse.EEXIST return fuse.Errno(syscall.ESPIPE)
case vfs.ESPIPE: case vfs.EBADF:
return fuse.Errno(syscall.ESPIPE) return fuse.Errno(syscall.EBADF)
case vfs.EBADF: case vfs.EROFS:
return fuse.Errno(syscall.EBADF) return fuse.Errno(syscall.EROFS)
case vfs.EROFS:
return fuse.Errno(syscall.EROFS)
}
} }
return err return err
} }

View file

@ -2,29 +2,34 @@
package vfs package vfs
import "fmt" import (
"fmt"
"os"
)
// Error describes low level errors in a cross platform way // Error describes low level errors in a cross platform way
type Error byte type Error byte
// NB if changing errors translateError in cmd/mount/fs.go, cmd/cmount/fs.go, cmd/serve/webdav/webdav.go // NB if changing errors translateError in cmd/mount/fs.go, cmd/cmount/fs.go
// Low level errors // Low level errors
const ( const (
OK Error = iota OK Error = iota
ENOENT
ENOTEMPTY ENOTEMPTY
EEXIST
ESPIPE ESPIPE
EBADF EBADF
EROFS EROFS
) )
// Errors which have exact counterparts in os
var (
ENOENT = os.ErrNotExist
EEXIST = os.ErrExist
)
var errorNames = []string{ var errorNames = []string{
OK: "Success", OK: "Success",
ENOENT: "No such file or directory",
ENOTEMPTY: "Directory not empty", ENOTEMPTY: "Directory not empty",
EEXIST: "File exists",
ESPIPE: "Illegal seek", ESPIPE: "Illegal seek",
EBADF: "Bad file descriptor", EBADF: "Bad file descriptor",
EROFS: "Read only file system", EROFS: "Read only file system",