mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-11-27 14:16:39 +00:00
107 lines
2 KiB
Go
107 lines
2 KiB
Go
|
//go:build !plan9 && !aix
|
||
|
|
||
|
package sys
|
||
|
|
||
|
import "syscall"
|
||
|
|
||
|
func syscallToErrno(err error) (Errno, bool) {
|
||
|
errno, ok := err.(syscall.Errno)
|
||
|
if !ok {
|
||
|
return 0, false
|
||
|
}
|
||
|
switch errno {
|
||
|
case 0:
|
||
|
return 0, true
|
||
|
case syscall.EACCES:
|
||
|
return EACCES, true
|
||
|
case syscall.EAGAIN:
|
||
|
return EAGAIN, true
|
||
|
case syscall.EBADF:
|
||
|
return EBADF, true
|
||
|
case syscall.EEXIST:
|
||
|
return EEXIST, true
|
||
|
case syscall.EFAULT:
|
||
|
return EFAULT, true
|
||
|
case syscall.EINTR:
|
||
|
return EINTR, true
|
||
|
case syscall.EINVAL:
|
||
|
return EINVAL, true
|
||
|
case syscall.EIO:
|
||
|
return EIO, true
|
||
|
case syscall.EISDIR:
|
||
|
return EISDIR, true
|
||
|
case syscall.ELOOP:
|
||
|
return ELOOP, true
|
||
|
case syscall.ENAMETOOLONG:
|
||
|
return ENAMETOOLONG, true
|
||
|
case syscall.ENOENT:
|
||
|
return ENOENT, true
|
||
|
case syscall.ENOSYS:
|
||
|
return ENOSYS, true
|
||
|
case syscall.ENOTDIR:
|
||
|
return ENOTDIR, true
|
||
|
case syscall.ERANGE:
|
||
|
return ERANGE, true
|
||
|
case syscall.ENOTEMPTY:
|
||
|
return ENOTEMPTY, true
|
||
|
case syscall.ENOTSOCK:
|
||
|
return ENOTSOCK, true
|
||
|
case syscall.ENOTSUP:
|
||
|
return ENOTSUP, true
|
||
|
case syscall.EPERM:
|
||
|
return EPERM, true
|
||
|
case syscall.EROFS:
|
||
|
return EROFS, true
|
||
|
default:
|
||
|
return EIO, true
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Unwrap is a convenience for runtime.GOOS which define syscall.Errno.
|
||
|
func (e Errno) Unwrap() error {
|
||
|
switch e {
|
||
|
case 0:
|
||
|
return nil
|
||
|
case EACCES:
|
||
|
return syscall.EACCES
|
||
|
case EAGAIN:
|
||
|
return syscall.EAGAIN
|
||
|
case EBADF:
|
||
|
return syscall.EBADF
|
||
|
case EEXIST:
|
||
|
return syscall.EEXIST
|
||
|
case EFAULT:
|
||
|
return syscall.EFAULT
|
||
|
case EINTR:
|
||
|
return syscall.EINTR
|
||
|
case EINVAL:
|
||
|
return syscall.EINVAL
|
||
|
case EIO:
|
||
|
return syscall.EIO
|
||
|
case EISDIR:
|
||
|
return syscall.EISDIR
|
||
|
case ELOOP:
|
||
|
return syscall.ELOOP
|
||
|
case ENAMETOOLONG:
|
||
|
return syscall.ENAMETOOLONG
|
||
|
case ENOENT:
|
||
|
return syscall.ENOENT
|
||
|
case ENOSYS:
|
||
|
return syscall.ENOSYS
|
||
|
case ENOTDIR:
|
||
|
return syscall.ENOTDIR
|
||
|
case ENOTEMPTY:
|
||
|
return syscall.ENOTEMPTY
|
||
|
case ENOTSOCK:
|
||
|
return syscall.ENOTSOCK
|
||
|
case ENOTSUP:
|
||
|
return syscall.ENOTSUP
|
||
|
case EPERM:
|
||
|
return syscall.EPERM
|
||
|
case EROFS:
|
||
|
return syscall.EROFS
|
||
|
default:
|
||
|
return syscall.EIO
|
||
|
}
|
||
|
}
|