filestash/vendor/github.com/vmware/go-nfs-client/nfs/error.go
2022-12-08 09:19:04 +11:00

124 lines
2.4 KiB
Go

// Copyright © 2017 VMware, Inc. All Rights Reserved.
// SPDX-License-Identifier: BSD-2-Clause
//
package nfs
import "os"
const (
NFS3Ok = 0
NFS3ErrPerm = 1
NFS3ErrNoEnt = 2
NFS3ErrIO = 5
NFS3ErrNXIO = 6
NFS3ErrAcces = 13
NFS3ErrExist = 17
NFS3ErrXDev = 18
NFS3ErrNoDev = 19
NFS3ErrNotDir = 20
NFS3ErrIsDir = 21
NFS3ErrInval = 22
NFS3ErrFBig = 27
NFS3ErrNoSpc = 28
NFS3ErrROFS = 30
NFS3ErrMLink = 31
NFS3ErrNameTooLong = 63
NFS3ErrNotEmpty = 66
NFS3ErrDQuot = 69
NFS3ErrStale = 70
NFS3ErrRemote = 71
NFS3ErrBadHandle = 10001
NFS3ErrNotSync = 10002
NFS3ErrBadCookie = 10003
NFS3ErrNotSupp = 10004
NFS3ErrTooSmall = 10005
NFS3ErrServerFault = 10006
NFS3ErrBadType = 10007
)
var errToName = map[uint32]string{
0: "NFS3_OK",
1: "NFS3ERR_PERM",
2: "NFS3ERR_NOENT",
5: "NFS3ERR_IO",
6: "NFS3ERR_NXIO",
13: "NFS3ERR_ACCES",
17: "NFS3ERR_EXIST",
18: "NFS3ERR_XDEV",
19: "NFS3ERR_NODEV",
20: "NFS3ERR_NOTDIR",
21: "NFS3ERR_ISDIR",
22: "NFS3ERR_INVAL",
27: "NFS3ERR_FBIG",
28: "NFS3ERR_NOSPC",
30: "NFS3ERR_ROFS",
31: "NFS3ERR_MLINK",
63: "NFS3ERR_NAMETOOLONG",
66: "NFS3ERR_NOTEMPTY",
69: "NFS3ERR_DQUOT",
70: "NFS3ERR_STALE",
71: "NFS3ERR_REMOTE",
10001: "NFS3ERR_BADHANDLE",
10002: "NFS3ERR_NOT_SYNC",
10003: "NFS3ERR_BAD_COOKIE",
10004: "NFS3ERR_NOTSUPP",
10005: "NFS3ERR_TOOSMALL",
10006: "NFS3ERR_SERVERFAULT",
10007: "NFS3ERR_BADTYPE",
}
func NFS3Error(errnum uint32) error {
switch errnum {
case NFS3Ok:
return nil
case NFS3ErrPerm:
return os.ErrPermission
case NFS3ErrExist:
return os.ErrExist
case NFS3ErrNoEnt:
return os.ErrNotExist
default:
if errStr, ok := errToName[errnum]; ok {
return &Error{
ErrorNum: errnum,
ErrorString: errStr,
}
}
return os.ErrInvalid
}
}
// Error represents an unexpected I/O behavior.
type Error struct {
ErrorNum uint32
ErrorString string
}
func (err *Error) Error() string { return err.ErrorString }
func IsNotEmptyError(err error) bool {
nfsErr, ok := err.(*Error)
if !ok {
return false
}
if nfsErr.ErrorNum == NFS3ErrNotEmpty {
return true
}
return false
}
func IsNotDirError(err error) bool {
nfsErr, ok := err.(*Error)
if !ok {
return false
}
if nfsErr.ErrorNum == NFS3ErrNotDir {
return true
}
return false
}