Refactor p9.ExtractErrno() into TryExtractErrno().

TryExtractErrno() additionally reports whether the error extraction was
successful.

PiperOrigin-RevId: 684532198
This commit is contained in:
Ayush Ranjan
2024-10-10 12:17:33 -07:00
committed by gVisor bot
parent a7b512f44e
commit ff1404239c
+18 -11
View File
@@ -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.