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