...
1
2
3 package sys
4
5 import "syscall"
6
7 func syscallToErrno(err error) (Errno, bool) {
8 errno, ok := err.(syscall.Errno)
9 if !ok {
10 return 0, false
11 }
12 switch errno {
13 case 0:
14 return 0, true
15 case syscall.EACCES:
16 return EACCES, true
17 case syscall.EAGAIN:
18 return EAGAIN, true
19 case syscall.EBADF:
20 return EBADF, true
21 case syscall.EEXIST:
22 return EEXIST, true
23 case syscall.EFAULT:
24 return EFAULT, true
25 case syscall.EINTR:
26 return EINTR, true
27 case syscall.EINVAL:
28 return EINVAL, true
29 case syscall.EIO:
30 return EIO, true
31 case syscall.EISDIR:
32 return EISDIR, true
33 case syscall.ELOOP:
34 return ELOOP, true
35 case syscall.ENAMETOOLONG:
36 return ENAMETOOLONG, true
37 case syscall.ENOENT:
38 return ENOENT, true
39 case syscall.ENOSYS:
40 return ENOSYS, true
41 case syscall.ENOTDIR:
42 return ENOTDIR, true
43 case syscall.ERANGE:
44 return ERANGE, true
45 case syscall.ENOTEMPTY:
46 return ENOTEMPTY, true
47 case syscall.ENOTSOCK:
48 return ENOTSOCK, true
49 case syscall.ENOTSUP:
50 return ENOTSUP, true
51 case syscall.EPERM:
52 return EPERM, true
53 case syscall.EROFS:
54 return EROFS, true
55 default:
56 return EIO, true
57 }
58 }
59
60
61 func (e Errno) Unwrap() error {
62 switch e {
63 case 0:
64 return nil
65 case EACCES:
66 return syscall.EACCES
67 case EAGAIN:
68 return syscall.EAGAIN
69 case EBADF:
70 return syscall.EBADF
71 case EEXIST:
72 return syscall.EEXIST
73 case EFAULT:
74 return syscall.EFAULT
75 case EINTR:
76 return syscall.EINTR
77 case EINVAL:
78 return syscall.EINVAL
79 case EIO:
80 return syscall.EIO
81 case EISDIR:
82 return syscall.EISDIR
83 case ELOOP:
84 return syscall.ELOOP
85 case ENAMETOOLONG:
86 return syscall.ENAMETOOLONG
87 case ENOENT:
88 return syscall.ENOENT
89 case ENOSYS:
90 return syscall.ENOSYS
91 case ENOTDIR:
92 return syscall.ENOTDIR
93 case ENOTEMPTY:
94 return syscall.ENOTEMPTY
95 case ENOTSOCK:
96 return syscall.ENOTSOCK
97 case ENOTSUP:
98 return syscall.ENOTSUP
99 case EPERM:
100 return syscall.EPERM
101 case EROFS:
102 return syscall.EROFS
103 default:
104 return syscall.EIO
105 }
106 }
107
View as plain text