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