#! /usr/bin/env python
"""
Error number definitions for Linux.
"""
EPERM = 1
ENOENT = 2
ESRCH = 3
EINTR = 4
EIO = 5
ENXIO = 6
E2BIG = 7
ENOEXEC = 8
EBADF = 9
ECHILD = 10
EAGAIN = 11
ENOMEM = 12
EACCES = 13
EFAULT = 14
ENOTBLK = 15
EBUSY = 16
EEXIST = 17
EXDEV = 18
ENODEV = 19
ENOTDIR = 20
EISDIR = 21
EINVAL = 22
ENFILE = 23
EMFILE = 24
ENOTTY = 25
ETXTBSY = 26
EFBIG = 27
ENOSPC = 28
ESPIPE = 29
EROFS = 30
EMLINK = 31
EPIPE = 32
EDOM = 33
ERANGE = 34
EDEADLK = 35
ENAMETOOLONG = 36
ENOLCK = 37
ENOSYS = 38
ENOTEMPTY = 39
ELOOP = 40
# 41 unused
ENOMSG = 42
EIDRM = 43
ECHRNG = 44
EL2NSYNC = 45
EL3HLT = 46
EL3RST = 47
ELNRNG = 48
EUNATCH = 49
ENOCSI = 50
EL2HLT = 51
EBADE = 52
EBADR = 53
EXFULL = 54
ENOANO = 55
EBADRQC = 56
EBADSLT = 57
# 58 unused
EBFONT = 59
ENOSTR = 60
ENODATA = 61
ETIME = 62
ENOSR = 63
ENONET = 64
ENOPKG = 65
EREMOTE = 66
ENOLINK = 67
EADV = 68
ESRMNT = 69
ECOMM = 70
EPROTO = 71
EMULTIHOP = 72
EDOTDOT = 73
EBADMSG = 74
EOVERFLOW = 75
ENOTUNIQ = 76
EBADFD = 77
EREMCHG = 78
ELIBACC = 79
ELIBBAD = 80
ELIBSCN = 81
ELIBMAX = 82
ELIBEXEC = 83
EILSEQ = 84
ERESTART = 85
ESTRPIPE = 86
EUSERS = 87
ENOTSOCK = 88
EDESTADDRREQ = 89
EMSGSIZE = 90
EPROTOTYPE = 91
ENOPROTOOPT = 92
EPROTONOSUPPORT = 93
ESOCKTNOSUPPORT = 94
EOPNOTSUPP = 95
EPFNOSUPPORT = 96
EAFNOSUPPORT = 97
EADDRINUSE = 98
EADDRNOTAVAIL = 99
ENETDOWN = 100
ENETUNREACH = 101
ENETRESET = 102
ECONNABORTED = 103
ECONNRESET = 104
ENOBUFS = 105
EISCONN = 106
ENOTCONN = 107
ESHUTDOWN = 108
ETOOMANYREFS = 109
ETIMEDOUT = 110
ECONNREFUSED = 111
EHOSTDOWN = 112
EHOSTUNREACH = 113
EALREADY = 114
EINPROGRESS = 115
ESTALE = 116
EUCLEAN = 117
ENOTNAM = 118
ENAVAIL = 119
EISNAM = 120
EREMOTEIO = 121
EDQUOT = 122
ENOMEDIUM = 123
EMEDIUMTYPE = 124
ECANCELED = 125
ENOKEY = 126
EKEYEXPIRED = 127
EKEYREVOKED = 128
EKEYREJECTED = 129
EOWNERDEAD = 130
ENOTRECOVERABLE = 131
ERFKILL = 132
EHWPOISON = 133
_strerror = {
EPERM: 'Permission denied',
ENOENT: 'No such file or directory',
ESRCH: 'No such process',
EINTR: 'Interrupted system call',
EIO: 'Input/output error',
ENXIO: 'Device not configured',
E2BIG: 'Argument list too long',
ENOEXEC: 'Exec format error',
EBADF: 'Bad file descriptor',
ECHILD: 'No child processes',
EAGAIN: 'Resource temporarily unavailable',
ENOMEM: 'Cannot allocate memory',
EACCES: 'Permission denied',
EFAULT: 'Bad address',
ENOTBLK: 'Block device required',
EBUSY: 'Device busy',
EEXIST: 'File exists',
EXDEV: 'Cross-device link',
ENODEV: 'Operation not supported by device',
ENOTDIR: 'Not a directory',
EISDIR: 'Is a directory',
EINVAL: 'Invalid argument',
ENFILE: 'Too many open files in system',
EMFILE: 'Too many open files',
ENOTTY: 'Inappropriate ioctl for device',
ETXTBSY: 'Text file busy',
EFBIG: 'File too large',
ENOSPC: 'No space left on device',
ESPIPE: 'Illegal seek',
EROFS: 'Read-only filesystem',
EMLINK: 'Too many links',
EPIPE: 'Broken pipe',
EDOM: 'Numerical argument out of domain',
ERANGE: 'Result too large',
EDEADLK: 'Resource deadlock avoided',
ENAMETOOLONG: 'File name too long',
ENOLCK: 'No locks available',
ENOSYS: 'Function not implemented',
ENOTEMPTY: 'Directory not empty',
ELOOP: 'Too many levels of symbolic links',
ENOMSG: 'No message of desired type',
EIDRM: 'Identifier removed',
ECHRNG: 'Channel number out of range',
EL2NSYNC: 'Level 2 not synchronized',
EL3HLT: 'Level 3 halted',
EL3RST: 'Level 3 reset',
ELNRNG: 'Link number out of range',
EUNATCH: 'Protocol driver not attached',
ENOCSI: 'No CSI structure available',
EL2HLT: 'Level 2 halted',
EBADE: 'Invalid exchange',
EBADR: 'Invalid request descriptor',
EXFULL: 'Exchange full',
ENOANO: 'No anode',
EBADRQC: 'Invalid request code',
EBADSLT: 'Invalid slot',
EBFONT: 'Bad font file format',
ENOSTR: 'Device not a stream',
ENODATA: 'No data available',
ETIME: 'Timer expired',
ENOSR: 'Out of streams resources',
ENONET: 'Machine is not on the network',
ENOPKG: 'Package not installed',
EREMOTE: 'Object is remote',
ENOLINK: 'Link has been severed',
EADV: 'Advertise error',
ESRMNT: 'Srmount error',
ECOMM: 'Communication error on send',
EPROTO: 'Protocol error',
EMULTIHOP: 'Multihop attempted',
EDOTDOT: 'RFS specific error',
EBADMSG: 'Bad message',
EOVERFLOW: 'Value too large for defined data type',
ENOTUNIQ: 'Name not unique on network',
EBADFD: 'File descriptor in bad state',
EREMCHG: 'Remote address changed',
ELIBACC: 'Can not access a needed shared library',
ELIBBAD: 'Accessing a corrupted shared library',
ELIBSCN: '.lib section in a.out corrupted',
ELIBMAX: 'Attempting to link in too many shared libraries',
ELIBEXEC: 'Cannot exec a shared library directly',
EILSEQ: 'Invalid or incomplete multibyte or wide character',
ERESTART: 'Interrupted system call should be restarted',
ESTRPIPE: 'Streams pipe error',
EUSERS: 'Too many users',
ENOTSOCK: 'Socket operation on non-socket',
EDESTADDRREQ: 'Destination address required',
EMSGSIZE: 'Message too long',
EPROTOTYPE: 'Protocol wrong type for socket',
ENOPROTOOPT: 'Protocol not available',
EPROTONOSUPPORT: 'Protocol not supported',
ESOCKTNOSUPPORT: 'Socket type not supported',
EOPNOTSUPP: 'Operation not supported',
EPFNOSUPPORT: 'Protocol family not supported',
EAFNOSUPPORT: 'Address family not supported by protocol',
EADDRINUSE: 'Address already in use',
EADDRNOTAVAIL: 'Cannot assign requested address',
ENETDOWN: 'Network is down',
ENETUNREACH: 'Network is unreachable',
ENETRESET: 'Network dropped connection on reset',
ECONNABORTED: 'Software caused connection abort',
ECONNRESET: 'Connection reset by peer',
ENOBUFS: 'No buffer space available',
EISCONN: 'Transport endpoint is already connected',
ENOTCONN: 'Transport endpoint is not connected',
ESHUTDOWN: 'Cannot send after transport endpoint shutdown',
ETOOMANYREFS: 'Too many references: cannot splice',
ETIMEDOUT: 'Connection timed out',
ECONNREFUSED: 'Connection refused',
EHOSTDOWN: 'Host is down',
EHOSTUNREACH: 'No route to host',
EALREADY: 'Operation already in progress',
EINPROGRESS: 'Operation now in progress',
ESTALE: 'Stale file handle',
EUCLEAN: 'Structure needs cleaning',
ENOTNAM: 'Not a XENIX named type file',
ENAVAIL: 'No XENIX semaphores available',
EISNAM: 'Is a named type file',
EREMOTEIO: 'Remote I/O error',
EDQUOT: 'Quota exceeded',
ENOMEDIUM: 'No medium found',
EMEDIUMTYPE: 'Wrong medium type',
ECANCELED: 'Operation canceled',
ENOKEY: 'Required key not available',
EKEYEXPIRED: 'Key has expired',
EKEYREVOKED: 'Key has been revoked',
EKEYREJECTED: 'Key was rejected by service',
EOWNERDEAD: 'Owner died',
ENOTRECOVERABLE: 'State not recoverable',
ERFKILL: 'Operation not possible due to RF-kill',
EHWPOISON: 'Memory page has hardware error',
}
def strerror(errnum):
"""
Translate Linux errno to string.
>>> strerror(ENOKEY)
'Required key not available'
>>> strerror(41)
'Unknown error 41'
"""
ret = _strerror.get(errnum)
if ret:
return ret
return 'Unknown error {0}'.format(errnum)
if __name__ == '__main__':
import doctest
doctest.testmod()