podman/vendor/github.com/hugelgupf/p9/linux/errors.go

39 lines
647 B
Go

package linux
import (
"errors"
"os"
)
// ExtractErrno extracts an [Errno] from an error, best effort.
//
// If the system-specific or Go-specific error cannot be mapped to anything, it
// will be logged and EIO will be returned.
func ExtractErrno(err error) Errno {
for _, pair := range []struct {
error
Errno
}{
{os.ErrNotExist, ENOENT},
{os.ErrExist, EEXIST},
{os.ErrPermission, EACCES},
{os.ErrInvalid, EINVAL},
} {
if errors.Is(err, pair.error) {
return pair.Errno
}
}
var errno Errno
if errors.As(err, &errno) {
return errno
}
if e := sysErrno(err); e != 0 {
return e
}
// Default case.
return EIO
}