mirror of https://github.com/containers/podman.git
39 lines
647 B
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
|
|
}
|