Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/lib9p/pytest/p9err.py
39536 views
1
#! /usr/bin/env python
2
3
"""
4
Error number definitions for 9P2000, .u, and .L.
5
6
Note that there is no native-to-9P2000 (plain) translation
7
table since 9P2000 takes error *strings* rather than error
8
*numbers*.
9
"""
10
11
import errno as _errno
12
import lerrno as _lerrno
13
import os as _os
14
15
_native_to_dotu = {
16
# These are in the "standard" range(1, errno.ERANGE)
17
# but do not map to themselves, so map them here first.
18
_errno.ENOTEMPTY: _errno.EPERM,
19
_errno.EDQUOT: _errno.EPERM,
20
_errno.ENOSYS: _errno.EPERM,
21
}
22
23
_native_to_dotl = {}
24
25
# Add standard errno's.
26
for _i in range(1, _errno.ERANGE):
27
_native_to_dotu.setdefault(_i, _i)
28
_native_to_dotl[_i] = _i
29
30
# Add linux errno's. Note that Linux EAGAIN at #11 overrides BSD EDEADLK,
31
# but Linux has EDEADLK at #35 which overrides BSD EAGAIN, so it all
32
# works out.
33
#
34
# We just list every BSD error name here, since the hasattr()s do
35
# the real work.
36
for _i in (
37
'EDEADLK',
38
'EAGAIN',
39
'EINPROGRESS',
40
'EALREADY',
41
'ENOTSOCK',
42
'EDESTADDRREQ',
43
'EMSGSIZE',
44
'EPROTOTYPE',
45
'ENOPROTOOPT',
46
'EPROTONOSUPPORT',
47
'ESOCKTNOSUPPORT',
48
'EOPNOTSUPP',
49
'EPFNOSUPPORT',
50
'EAFNOSUPPORT',
51
'EADDRINUSE',
52
'EADDRNOTAVAIL',
53
'ENETDOWN',
54
'ENETUNREACH',
55
'ENETRESET',
56
'ECONNABORTED',
57
'ECONNRESET',
58
'ENOBUFS',
59
'EISCONN',
60
'ENOTCONN',
61
'ESHUTDOWN',
62
'ETOOMANYREFS',
63
'ETIMEDOUT',
64
'ECONNREFUSED',
65
'ELOOP',
66
'ENAMETOOLONG',
67
'EHOSTDOWN',
68
'EHOSTUNREACH',
69
'ENOTEMPTY',
70
'EPROCLIM',
71
'EUSERS',
72
'EDQUOT',
73
'ESTALE',
74
'EREMOTE',
75
'EBADRPC',
76
'ERPCMISMATCH',
77
'EPROGUNAVAIL',
78
'EPROGMISMATCH',
79
'EPROCUNAVAIL',
80
'ENOLCK',
81
'ENOSYS',
82
'EFTYPE',
83
'EAUTH',
84
'ENEEDAUTH',
85
'EIDRM',
86
'ENOMSG',
87
'EOVERFLOW',
88
'ECANCELED',
89
'EILSEQ',
90
'EDOOFUS',
91
'EBADMSG',
92
'EMULTIHOP',
93
'ENOLINK',
94
'EPROTO',
95
'ENOTCAPABLE',
96
'ECAPMODE',
97
'ENOTRECOVERABLE',
98
'EOWNERDEAD',
99
):
100
if hasattr(_errno, _i) and hasattr(_lerrno, _i):
101
_native_to_dotl[getattr(_errno, _i)] = getattr(_lerrno, _i)
102
del _i
103
104
def to_dotu(errnum):
105
"""
106
Translate native errno to 9P2000.u errno.
107
108
>>> import errno
109
>>> to_dotu(errno.EIO)
110
5
111
>>> to_dotu(errno.EDQUOT)
112
1
113
>>> to_dotu(errno.ELOOP)
114
5
115
116
There is a corresponding dotu_strerror() (which is really
117
just os.strerror):
118
119
>>> dotu_strerror(5)
120
'Input/output error'
121
122
"""
123
return _native_to_dotu.get(errnum, _errno.EIO) # default to EIO
124
125
def to_dotl(errnum):
126
"""
127
Translate native errno to 9P2000.L errno.
128
129
>>> import errno
130
>>> to_dotl(errno.ELOOP)
131
40
132
133
There is a corresponding dotl_strerror():
134
135
>>> dotl_strerror(40)
136
'Too many levels of symbolic links'
137
"""
138
return _native_to_dotl.get(errnum, _lerrno.ENOTRECOVERABLE)
139
140
dotu_strerror = _os.strerror
141
142
dotl_strerror = _lerrno.strerror
143
144
if __name__ == '__main__':
145
import doctest
146
doctest.testmod()
147
148