1*134e1779SJakub Wojciech Klama#! /usr/bin/env python 2*134e1779SJakub Wojciech Klama 3*134e1779SJakub Wojciech Klama""" 4*134e1779SJakub Wojciech KlamaError number definitions for Linux. 5*134e1779SJakub Wojciech Klama""" 6*134e1779SJakub Wojciech Klama 7*134e1779SJakub Wojciech KlamaEPERM = 1 8*134e1779SJakub Wojciech KlamaENOENT = 2 9*134e1779SJakub Wojciech KlamaESRCH = 3 10*134e1779SJakub Wojciech KlamaEINTR = 4 11*134e1779SJakub Wojciech KlamaEIO = 5 12*134e1779SJakub Wojciech KlamaENXIO = 6 13*134e1779SJakub Wojciech KlamaE2BIG = 7 14*134e1779SJakub Wojciech KlamaENOEXEC = 8 15*134e1779SJakub Wojciech KlamaEBADF = 9 16*134e1779SJakub Wojciech KlamaECHILD = 10 17*134e1779SJakub Wojciech KlamaEAGAIN = 11 18*134e1779SJakub Wojciech KlamaENOMEM = 12 19*134e1779SJakub Wojciech KlamaEACCES = 13 20*134e1779SJakub Wojciech KlamaEFAULT = 14 21*134e1779SJakub Wojciech KlamaENOTBLK = 15 22*134e1779SJakub Wojciech KlamaEBUSY = 16 23*134e1779SJakub Wojciech KlamaEEXIST = 17 24*134e1779SJakub Wojciech KlamaEXDEV = 18 25*134e1779SJakub Wojciech KlamaENODEV = 19 26*134e1779SJakub Wojciech KlamaENOTDIR = 20 27*134e1779SJakub Wojciech KlamaEISDIR = 21 28*134e1779SJakub Wojciech KlamaEINVAL = 22 29*134e1779SJakub Wojciech KlamaENFILE = 23 30*134e1779SJakub Wojciech KlamaEMFILE = 24 31*134e1779SJakub Wojciech KlamaENOTTY = 25 32*134e1779SJakub Wojciech KlamaETXTBSY = 26 33*134e1779SJakub Wojciech KlamaEFBIG = 27 34*134e1779SJakub Wojciech KlamaENOSPC = 28 35*134e1779SJakub Wojciech KlamaESPIPE = 29 36*134e1779SJakub Wojciech KlamaEROFS = 30 37*134e1779SJakub Wojciech KlamaEMLINK = 31 38*134e1779SJakub Wojciech KlamaEPIPE = 32 39*134e1779SJakub Wojciech KlamaEDOM = 33 40*134e1779SJakub Wojciech KlamaERANGE = 34 41*134e1779SJakub Wojciech KlamaEDEADLK = 35 42*134e1779SJakub Wojciech KlamaENAMETOOLONG = 36 43*134e1779SJakub Wojciech KlamaENOLCK = 37 44*134e1779SJakub Wojciech KlamaENOSYS = 38 45*134e1779SJakub Wojciech KlamaENOTEMPTY = 39 46*134e1779SJakub Wojciech KlamaELOOP = 40 47*134e1779SJakub Wojciech Klama# 41 unused 48*134e1779SJakub Wojciech KlamaENOMSG = 42 49*134e1779SJakub Wojciech KlamaEIDRM = 43 50*134e1779SJakub Wojciech KlamaECHRNG = 44 51*134e1779SJakub Wojciech KlamaEL2NSYNC = 45 52*134e1779SJakub Wojciech KlamaEL3HLT = 46 53*134e1779SJakub Wojciech KlamaEL3RST = 47 54*134e1779SJakub Wojciech KlamaELNRNG = 48 55*134e1779SJakub Wojciech KlamaEUNATCH = 49 56*134e1779SJakub Wojciech KlamaENOCSI = 50 57*134e1779SJakub Wojciech KlamaEL2HLT = 51 58*134e1779SJakub Wojciech KlamaEBADE = 52 59*134e1779SJakub Wojciech KlamaEBADR = 53 60*134e1779SJakub Wojciech KlamaEXFULL = 54 61*134e1779SJakub Wojciech KlamaENOANO = 55 62*134e1779SJakub Wojciech KlamaEBADRQC = 56 63*134e1779SJakub Wojciech KlamaEBADSLT = 57 64*134e1779SJakub Wojciech Klama# 58 unused 65*134e1779SJakub Wojciech KlamaEBFONT = 59 66*134e1779SJakub Wojciech KlamaENOSTR = 60 67*134e1779SJakub Wojciech KlamaENODATA = 61 68*134e1779SJakub Wojciech KlamaETIME = 62 69*134e1779SJakub Wojciech KlamaENOSR = 63 70*134e1779SJakub Wojciech KlamaENONET = 64 71*134e1779SJakub Wojciech KlamaENOPKG = 65 72*134e1779SJakub Wojciech KlamaEREMOTE = 66 73*134e1779SJakub Wojciech KlamaENOLINK = 67 74*134e1779SJakub Wojciech KlamaEADV = 68 75*134e1779SJakub Wojciech KlamaESRMNT = 69 76*134e1779SJakub Wojciech KlamaECOMM = 70 77*134e1779SJakub Wojciech KlamaEPROTO = 71 78*134e1779SJakub Wojciech KlamaEMULTIHOP = 72 79*134e1779SJakub Wojciech KlamaEDOTDOT = 73 80*134e1779SJakub Wojciech KlamaEBADMSG = 74 81*134e1779SJakub Wojciech KlamaEOVERFLOW = 75 82*134e1779SJakub Wojciech KlamaENOTUNIQ = 76 83*134e1779SJakub Wojciech KlamaEBADFD = 77 84*134e1779SJakub Wojciech KlamaEREMCHG = 78 85*134e1779SJakub Wojciech KlamaELIBACC = 79 86*134e1779SJakub Wojciech KlamaELIBBAD = 80 87*134e1779SJakub Wojciech KlamaELIBSCN = 81 88*134e1779SJakub Wojciech KlamaELIBMAX = 82 89*134e1779SJakub Wojciech KlamaELIBEXEC = 83 90*134e1779SJakub Wojciech KlamaEILSEQ = 84 91*134e1779SJakub Wojciech KlamaERESTART = 85 92*134e1779SJakub Wojciech KlamaESTRPIPE = 86 93*134e1779SJakub Wojciech KlamaEUSERS = 87 94*134e1779SJakub Wojciech KlamaENOTSOCK = 88 95*134e1779SJakub Wojciech KlamaEDESTADDRREQ = 89 96*134e1779SJakub Wojciech KlamaEMSGSIZE = 90 97*134e1779SJakub Wojciech KlamaEPROTOTYPE = 91 98*134e1779SJakub Wojciech KlamaENOPROTOOPT = 92 99*134e1779SJakub Wojciech KlamaEPROTONOSUPPORT = 93 100*134e1779SJakub Wojciech KlamaESOCKTNOSUPPORT = 94 101*134e1779SJakub Wojciech KlamaEOPNOTSUPP = 95 102*134e1779SJakub Wojciech KlamaEPFNOSUPPORT = 96 103*134e1779SJakub Wojciech KlamaEAFNOSUPPORT = 97 104*134e1779SJakub Wojciech KlamaEADDRINUSE = 98 105*134e1779SJakub Wojciech KlamaEADDRNOTAVAIL = 99 106*134e1779SJakub Wojciech KlamaENETDOWN = 100 107*134e1779SJakub Wojciech KlamaENETUNREACH = 101 108*134e1779SJakub Wojciech KlamaENETRESET = 102 109*134e1779SJakub Wojciech KlamaECONNABORTED = 103 110*134e1779SJakub Wojciech KlamaECONNRESET = 104 111*134e1779SJakub Wojciech KlamaENOBUFS = 105 112*134e1779SJakub Wojciech KlamaEISCONN = 106 113*134e1779SJakub Wojciech KlamaENOTCONN = 107 114*134e1779SJakub Wojciech KlamaESHUTDOWN = 108 115*134e1779SJakub Wojciech KlamaETOOMANYREFS = 109 116*134e1779SJakub Wojciech KlamaETIMEDOUT = 110 117*134e1779SJakub Wojciech KlamaECONNREFUSED = 111 118*134e1779SJakub Wojciech KlamaEHOSTDOWN = 112 119*134e1779SJakub Wojciech KlamaEHOSTUNREACH = 113 120*134e1779SJakub Wojciech KlamaEALREADY = 114 121*134e1779SJakub Wojciech KlamaEINPROGRESS = 115 122*134e1779SJakub Wojciech KlamaESTALE = 116 123*134e1779SJakub Wojciech KlamaEUCLEAN = 117 124*134e1779SJakub Wojciech KlamaENOTNAM = 118 125*134e1779SJakub Wojciech KlamaENAVAIL = 119 126*134e1779SJakub Wojciech KlamaEISNAM = 120 127*134e1779SJakub Wojciech KlamaEREMOTEIO = 121 128*134e1779SJakub Wojciech KlamaEDQUOT = 122 129*134e1779SJakub Wojciech KlamaENOMEDIUM = 123 130*134e1779SJakub Wojciech KlamaEMEDIUMTYPE = 124 131*134e1779SJakub Wojciech KlamaECANCELED = 125 132*134e1779SJakub Wojciech KlamaENOKEY = 126 133*134e1779SJakub Wojciech KlamaEKEYEXPIRED = 127 134*134e1779SJakub Wojciech KlamaEKEYREVOKED = 128 135*134e1779SJakub Wojciech KlamaEKEYREJECTED = 129 136*134e1779SJakub Wojciech KlamaEOWNERDEAD = 130 137*134e1779SJakub Wojciech KlamaENOTRECOVERABLE = 131 138*134e1779SJakub Wojciech KlamaERFKILL = 132 139*134e1779SJakub Wojciech KlamaEHWPOISON = 133 140*134e1779SJakub Wojciech Klama 141*134e1779SJakub Wojciech Klama_strerror = { 142*134e1779SJakub Wojciech Klama EPERM: 'Permission denied', 143*134e1779SJakub Wojciech Klama ENOENT: 'No such file or directory', 144*134e1779SJakub Wojciech Klama ESRCH: 'No such process', 145*134e1779SJakub Wojciech Klama EINTR: 'Interrupted system call', 146*134e1779SJakub Wojciech Klama EIO: 'Input/output error', 147*134e1779SJakub Wojciech Klama ENXIO: 'Device not configured', 148*134e1779SJakub Wojciech Klama E2BIG: 'Argument list too long', 149*134e1779SJakub Wojciech Klama ENOEXEC: 'Exec format error', 150*134e1779SJakub Wojciech Klama EBADF: 'Bad file descriptor', 151*134e1779SJakub Wojciech Klama ECHILD: 'No child processes', 152*134e1779SJakub Wojciech Klama EAGAIN: 'Resource temporarily unavailable', 153*134e1779SJakub Wojciech Klama ENOMEM: 'Cannot allocate memory', 154*134e1779SJakub Wojciech Klama EACCES: 'Permission denied', 155*134e1779SJakub Wojciech Klama EFAULT: 'Bad address', 156*134e1779SJakub Wojciech Klama ENOTBLK: 'Block device required', 157*134e1779SJakub Wojciech Klama EBUSY: 'Device busy', 158*134e1779SJakub Wojciech Klama EEXIST: 'File exists', 159*134e1779SJakub Wojciech Klama EXDEV: 'Cross-device link', 160*134e1779SJakub Wojciech Klama ENODEV: 'Operation not supported by device', 161*134e1779SJakub Wojciech Klama ENOTDIR: 'Not a directory', 162*134e1779SJakub Wojciech Klama EISDIR: 'Is a directory', 163*134e1779SJakub Wojciech Klama EINVAL: 'Invalid argument', 164*134e1779SJakub Wojciech Klama ENFILE: 'Too many open files in system', 165*134e1779SJakub Wojciech Klama EMFILE: 'Too many open files', 166*134e1779SJakub Wojciech Klama ENOTTY: 'Inappropriate ioctl for device', 167*134e1779SJakub Wojciech Klama ETXTBSY: 'Text file busy', 168*134e1779SJakub Wojciech Klama EFBIG: 'File too large', 169*134e1779SJakub Wojciech Klama ENOSPC: 'No space left on device', 170*134e1779SJakub Wojciech Klama ESPIPE: 'Illegal seek', 171*134e1779SJakub Wojciech Klama EROFS: 'Read-only filesystem', 172*134e1779SJakub Wojciech Klama EMLINK: 'Too many links', 173*134e1779SJakub Wojciech Klama EPIPE: 'Broken pipe', 174*134e1779SJakub Wojciech Klama EDOM: 'Numerical argument out of domain', 175*134e1779SJakub Wojciech Klama ERANGE: 'Result too large', 176*134e1779SJakub Wojciech Klama EDEADLK: 'Resource deadlock avoided', 177*134e1779SJakub Wojciech Klama ENAMETOOLONG: 'File name too long', 178*134e1779SJakub Wojciech Klama ENOLCK: 'No locks available', 179*134e1779SJakub Wojciech Klama ENOSYS: 'Function not implemented', 180*134e1779SJakub Wojciech Klama ENOTEMPTY: 'Directory not empty', 181*134e1779SJakub Wojciech Klama ELOOP: 'Too many levels of symbolic links', 182*134e1779SJakub Wojciech Klama ENOMSG: 'No message of desired type', 183*134e1779SJakub Wojciech Klama EIDRM: 'Identifier removed', 184*134e1779SJakub Wojciech Klama ECHRNG: 'Channel number out of range', 185*134e1779SJakub Wojciech Klama EL2NSYNC: 'Level 2 not synchronized', 186*134e1779SJakub Wojciech Klama EL3HLT: 'Level 3 halted', 187*134e1779SJakub Wojciech Klama EL3RST: 'Level 3 reset', 188*134e1779SJakub Wojciech Klama ELNRNG: 'Link number out of range', 189*134e1779SJakub Wojciech Klama EUNATCH: 'Protocol driver not attached', 190*134e1779SJakub Wojciech Klama ENOCSI: 'No CSI structure available', 191*134e1779SJakub Wojciech Klama EL2HLT: 'Level 2 halted', 192*134e1779SJakub Wojciech Klama EBADE: 'Invalid exchange', 193*134e1779SJakub Wojciech Klama EBADR: 'Invalid request descriptor', 194*134e1779SJakub Wojciech Klama EXFULL: 'Exchange full', 195*134e1779SJakub Wojciech Klama ENOANO: 'No anode', 196*134e1779SJakub Wojciech Klama EBADRQC: 'Invalid request code', 197*134e1779SJakub Wojciech Klama EBADSLT: 'Invalid slot', 198*134e1779SJakub Wojciech Klama EBFONT: 'Bad font file format', 199*134e1779SJakub Wojciech Klama ENOSTR: 'Device not a stream', 200*134e1779SJakub Wojciech Klama ENODATA: 'No data available', 201*134e1779SJakub Wojciech Klama ETIME: 'Timer expired', 202*134e1779SJakub Wojciech Klama ENOSR: 'Out of streams resources', 203*134e1779SJakub Wojciech Klama ENONET: 'Machine is not on the network', 204*134e1779SJakub Wojciech Klama ENOPKG: 'Package not installed', 205*134e1779SJakub Wojciech Klama EREMOTE: 'Object is remote', 206*134e1779SJakub Wojciech Klama ENOLINK: 'Link has been severed', 207*134e1779SJakub Wojciech Klama EADV: 'Advertise error', 208*134e1779SJakub Wojciech Klama ESRMNT: 'Srmount error', 209*134e1779SJakub Wojciech Klama ECOMM: 'Communication error on send', 210*134e1779SJakub Wojciech Klama EPROTO: 'Protocol error', 211*134e1779SJakub Wojciech Klama EMULTIHOP: 'Multihop attempted', 212*134e1779SJakub Wojciech Klama EDOTDOT: 'RFS specific error', 213*134e1779SJakub Wojciech Klama EBADMSG: 'Bad message', 214*134e1779SJakub Wojciech Klama EOVERFLOW: 'Value too large for defined data type', 215*134e1779SJakub Wojciech Klama ENOTUNIQ: 'Name not unique on network', 216*134e1779SJakub Wojciech Klama EBADFD: 'File descriptor in bad state', 217*134e1779SJakub Wojciech Klama EREMCHG: 'Remote address changed', 218*134e1779SJakub Wojciech Klama ELIBACC: 'Can not access a needed shared library', 219*134e1779SJakub Wojciech Klama ELIBBAD: 'Accessing a corrupted shared library', 220*134e1779SJakub Wojciech Klama ELIBSCN: '.lib section in a.out corrupted', 221*134e1779SJakub Wojciech Klama ELIBMAX: 'Attempting to link in too many shared libraries', 222*134e1779SJakub Wojciech Klama ELIBEXEC: 'Cannot exec a shared library directly', 223*134e1779SJakub Wojciech Klama EILSEQ: 'Invalid or incomplete multibyte or wide character', 224*134e1779SJakub Wojciech Klama ERESTART: 'Interrupted system call should be restarted', 225*134e1779SJakub Wojciech Klama ESTRPIPE: 'Streams pipe error', 226*134e1779SJakub Wojciech Klama EUSERS: 'Too many users', 227*134e1779SJakub Wojciech Klama ENOTSOCK: 'Socket operation on non-socket', 228*134e1779SJakub Wojciech Klama EDESTADDRREQ: 'Destination address required', 229*134e1779SJakub Wojciech Klama EMSGSIZE: 'Message too long', 230*134e1779SJakub Wojciech Klama EPROTOTYPE: 'Protocol wrong type for socket', 231*134e1779SJakub Wojciech Klama ENOPROTOOPT: 'Protocol not available', 232*134e1779SJakub Wojciech Klama EPROTONOSUPPORT: 'Protocol not supported', 233*134e1779SJakub Wojciech Klama ESOCKTNOSUPPORT: 'Socket type not supported', 234*134e1779SJakub Wojciech Klama EOPNOTSUPP: 'Operation not supported', 235*134e1779SJakub Wojciech Klama EPFNOSUPPORT: 'Protocol family not supported', 236*134e1779SJakub Wojciech Klama EAFNOSUPPORT: 'Address family not supported by protocol', 237*134e1779SJakub Wojciech Klama EADDRINUSE: 'Address already in use', 238*134e1779SJakub Wojciech Klama EADDRNOTAVAIL: 'Cannot assign requested address', 239*134e1779SJakub Wojciech Klama ENETDOWN: 'Network is down', 240*134e1779SJakub Wojciech Klama ENETUNREACH: 'Network is unreachable', 241*134e1779SJakub Wojciech Klama ENETRESET: 'Network dropped connection on reset', 242*134e1779SJakub Wojciech Klama ECONNABORTED: 'Software caused connection abort', 243*134e1779SJakub Wojciech Klama ECONNRESET: 'Connection reset by peer', 244*134e1779SJakub Wojciech Klama ENOBUFS: 'No buffer space available', 245*134e1779SJakub Wojciech Klama EISCONN: 'Transport endpoint is already connected', 246*134e1779SJakub Wojciech Klama ENOTCONN: 'Transport endpoint is not connected', 247*134e1779SJakub Wojciech Klama ESHUTDOWN: 'Cannot send after transport endpoint shutdown', 248*134e1779SJakub Wojciech Klama ETOOMANYREFS: 'Too many references: cannot splice', 249*134e1779SJakub Wojciech Klama ETIMEDOUT: 'Connection timed out', 250*134e1779SJakub Wojciech Klama ECONNREFUSED: 'Connection refused', 251*134e1779SJakub Wojciech Klama EHOSTDOWN: 'Host is down', 252*134e1779SJakub Wojciech Klama EHOSTUNREACH: 'No route to host', 253*134e1779SJakub Wojciech Klama EALREADY: 'Operation already in progress', 254*134e1779SJakub Wojciech Klama EINPROGRESS: 'Operation now in progress', 255*134e1779SJakub Wojciech Klama ESTALE: 'Stale file handle', 256*134e1779SJakub Wojciech Klama EUCLEAN: 'Structure needs cleaning', 257*134e1779SJakub Wojciech Klama ENOTNAM: 'Not a XENIX named type file', 258*134e1779SJakub Wojciech Klama ENAVAIL: 'No XENIX semaphores available', 259*134e1779SJakub Wojciech Klama EISNAM: 'Is a named type file', 260*134e1779SJakub Wojciech Klama EREMOTEIO: 'Remote I/O error', 261*134e1779SJakub Wojciech Klama EDQUOT: 'Quota exceeded', 262*134e1779SJakub Wojciech Klama ENOMEDIUM: 'No medium found', 263*134e1779SJakub Wojciech Klama EMEDIUMTYPE: 'Wrong medium type', 264*134e1779SJakub Wojciech Klama ECANCELED: 'Operation canceled', 265*134e1779SJakub Wojciech Klama ENOKEY: 'Required key not available', 266*134e1779SJakub Wojciech Klama EKEYEXPIRED: 'Key has expired', 267*134e1779SJakub Wojciech Klama EKEYREVOKED: 'Key has been revoked', 268*134e1779SJakub Wojciech Klama EKEYREJECTED: 'Key was rejected by service', 269*134e1779SJakub Wojciech Klama EOWNERDEAD: 'Owner died', 270*134e1779SJakub Wojciech Klama ENOTRECOVERABLE: 'State not recoverable', 271*134e1779SJakub Wojciech Klama ERFKILL: 'Operation not possible due to RF-kill', 272*134e1779SJakub Wojciech Klama EHWPOISON: 'Memory page has hardware error', 273*134e1779SJakub Wojciech Klama} 274*134e1779SJakub Wojciech Klama 275*134e1779SJakub Wojciech Klamadef strerror(errnum): 276*134e1779SJakub Wojciech Klama """ 277*134e1779SJakub Wojciech Klama Translate Linux errno to string. 278*134e1779SJakub Wojciech Klama 279*134e1779SJakub Wojciech Klama >>> strerror(ENOKEY) 280*134e1779SJakub Wojciech Klama 'Required key not available' 281*134e1779SJakub Wojciech Klama >>> strerror(41) 282*134e1779SJakub Wojciech Klama 'Unknown error 41' 283*134e1779SJakub Wojciech Klama """ 284*134e1779SJakub Wojciech Klama ret = _strerror.get(errnum) 285*134e1779SJakub Wojciech Klama if ret: 286*134e1779SJakub Wojciech Klama return ret 287*134e1779SJakub Wojciech Klama return 'Unknown error {0}'.format(errnum) 288*134e1779SJakub Wojciech Klama 289*134e1779SJakub Wojciech Klamaif __name__ == '__main__': 290*134e1779SJakub Wojciech Klama import doctest 291*134e1779SJakub Wojciech Klama doctest.testmod() 292