mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Refactor p9.ExtractErrno() into TryExtractErrno().
TryExtractErrno() additionally reports whether the error extraction was successful. PiperOrigin-RevId: 684532198
This commit is contained in:
+18
-11
@@ -30,36 +30,43 @@ import (
|
||||
"gvisor.dev/gvisor/pkg/log"
|
||||
)
|
||||
|
||||
// ExtractErrno extracts a unix.Errno from a error, best effort.
|
||||
// ExtractErrno extracts a unix.Errno from an error, best effort.
|
||||
func ExtractErrno(err error) unix.Errno {
|
||||
errno, _ := TryExtractErrno(err)
|
||||
return errno
|
||||
}
|
||||
|
||||
// TryExtractErrno extracts a unix.Errno from an error, and reports whether it
|
||||
// was successful. If unsuccessful, the returned errno is EIO.
|
||||
func TryExtractErrno(err error) (unix.Errno, bool) {
|
||||
switch err {
|
||||
case os.ErrNotExist:
|
||||
return unix.ENOENT
|
||||
return unix.ENOENT, true
|
||||
case os.ErrExist:
|
||||
return unix.EEXIST
|
||||
return unix.EEXIST, true
|
||||
case os.ErrPermission:
|
||||
return unix.EACCES
|
||||
return unix.EACCES, true
|
||||
case os.ErrInvalid:
|
||||
return unix.EINVAL
|
||||
return unix.EINVAL, true
|
||||
}
|
||||
|
||||
// Attempt to unwrap.
|
||||
switch e := err.(type) {
|
||||
case *errors.Error:
|
||||
return linuxerr.ToUnix(e)
|
||||
return linuxerr.ToUnix(e), true
|
||||
case unix.Errno:
|
||||
return e
|
||||
return e, true
|
||||
case *os.PathError:
|
||||
return ExtractErrno(e.Err)
|
||||
return TryExtractErrno(e.Err)
|
||||
case *os.SyscallError:
|
||||
return ExtractErrno(e.Err)
|
||||
return TryExtractErrno(e.Err)
|
||||
case *os.LinkError:
|
||||
return ExtractErrno(e.Err)
|
||||
return TryExtractErrno(e.Err)
|
||||
}
|
||||
|
||||
// Default case.
|
||||
log.Warningf("unknown error: %v", err)
|
||||
return unix.EIO
|
||||
return unix.EIO, false
|
||||
}
|
||||
|
||||
// newErr returns a new error message from an error.
|
||||
|
||||
Reference in New Issue
Block a user