Home | History | Annotate | Download | only in Modules
      1 /* Errno module
      2 
      3     Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
      4     This program and the accompanying materials are licensed and made available under
      5     the terms and conditions of the BSD License that accompanies this distribution.
      6     The full text of the license may be found at
      7     http://opensource.org/licenses/bsd-license.
      8 
      9     THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10     WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 */
     12 
     13 #include "Python.h"
     14 
     15 /* Windows socket errors (WSA*)  */
     16 #ifdef MS_WINDOWS
     17 #include <windows.h>
     18 #endif
     19 
     20 /*
     21  * Pull in the system error definitions
     22  */
     23 
     24 static PyMethodDef errno_methods[] = {
     25     {NULL,              NULL}
     26 };
     27 
     28 /* Helper function doing the dictionary inserting */
     29 
     30 static void
     31 _inscode(PyObject *d, PyObject *de, char *name, int code)
     32 {
     33     PyObject *u = PyString_FromString(name);
     34     PyObject *v = PyInt_FromLong((long) code);
     35 
     36     /* Don't bother checking for errors; they'll be caught at the end
     37      * of the module initialization function by the caller of
     38      * initerrno().
     39      */
     40     if (u && v) {
     41         /* insert in modules dict */
     42         PyDict_SetItem(d, u, v);
     43         /* insert in errorcode dict */
     44         PyDict_SetItem(de, v, u);
     45     }
     46     Py_XDECREF(u);
     47     Py_XDECREF(v);
     48 }
     49 
     50 PyDoc_STRVAR(errno__doc__,
     51 "This module makes available standard errno system symbols.\n\
     52 \n\
     53 The value of each symbol is the corresponding integer value,\n\
     54 e.g., on most systems, errno.ENOENT equals the integer 2.\n\
     55 \n\
     56 The dictionary errno.errorcode maps numeric codes to symbol names,\n\
     57 e.g., errno.errorcode[2] could be the string 'ENOENT'.\n\
     58 \n\
     59 Symbols that are not relevant to the underlying system are not defined.\n\
     60 \n\
     61 To map error codes to error messages, use the function os.strerror(),\n\
     62 e.g. os.strerror(2) could return 'No such file or directory'.");
     63 
     64 PyMODINIT_FUNC
     65 initerrno(void)
     66 {
     67     PyObject *m, *d, *de;
     68     m = Py_InitModule3("errno", errno_methods, errno__doc__);
     69     if (m == NULL)
     70         return;
     71     d = PyModule_GetDict(m);
     72     de = PyDict_New();
     73     if (!d || !de || PyDict_SetItemString(d, "errorcode", de) < 0)
     74         return;
     75 
     76 /* Macro so I don't have to edit each and every line below... */
     77 #define inscode(d, ds, de, name, code, comment) _inscode(d, de, name, code)
     78 
     79     /*
     80      * The names and comments are borrowed from linux/include/errno.h,
     81      * which should be pretty all-inclusive
     82      */
     83 
     84 #ifdef ENODEV
     85     inscode(d, ds, de, "ENODEV", ENODEV, "No such device");
     86 #endif
     87 #ifdef ENOCSI
     88     inscode(d, ds, de, "ENOCSI", ENOCSI, "No CSI structure available");
     89 #endif
     90 #ifdef EHOSTUNREACH
     91     inscode(d, ds, de, "EHOSTUNREACH", EHOSTUNREACH, "No route to host");
     92 #else
     93 #ifdef WSAEHOSTUNREACH
     94     inscode(d, ds, de, "EHOSTUNREACH", WSAEHOSTUNREACH, "No route to host");
     95 #endif
     96 #endif
     97 #ifdef ENOMSG
     98     inscode(d, ds, de, "ENOMSG", ENOMSG, "No message of desired type");
     99 #endif
    100 #ifdef EUCLEAN
    101     inscode(d, ds, de, "EUCLEAN", EUCLEAN, "Structure needs cleaning");
    102 #endif
    103 #ifdef EL2NSYNC
    104     inscode(d, ds, de, "EL2NSYNC", EL2NSYNC, "Level 2 not synchronized");
    105 #endif
    106 #ifdef EL2HLT
    107     inscode(d, ds, de, "EL2HLT", EL2HLT, "Level 2 halted");
    108 #endif
    109 #ifdef ENODATA
    110     inscode(d, ds, de, "ENODATA", ENODATA, "No data available");
    111 #endif
    112 #ifdef ENOTBLK
    113     inscode(d, ds, de, "ENOTBLK", ENOTBLK, "Block device required");
    114 #endif
    115 #ifdef ENOSYS
    116     inscode(d, ds, de, "ENOSYS", ENOSYS, "Function not implemented");
    117 #endif
    118 #ifdef EPIPE
    119     inscode(d, ds, de, "EPIPE", EPIPE, "Broken pipe");
    120 #endif
    121 #ifdef EINVAL
    122     inscode(d, ds, de, "EINVAL", EINVAL, "Invalid argument");
    123 #else
    124 #ifdef WSAEINVAL
    125     inscode(d, ds, de, "EINVAL", WSAEINVAL, "Invalid argument");
    126 #endif
    127 #endif
    128 #ifdef EOVERFLOW
    129     inscode(d, ds, de, "EOVERFLOW", EOVERFLOW, "Value too large for defined data type");
    130 #endif
    131 #ifdef EADV
    132     inscode(d, ds, de, "EADV", EADV, "Advertise error");
    133 #endif
    134 #ifdef EINTR
    135     inscode(d, ds, de, "EINTR", EINTR, "Interrupted system call");
    136 #else
    137 #ifdef WSAEINTR
    138     inscode(d, ds, de, "EINTR", WSAEINTR, "Interrupted system call");
    139 #endif
    140 #endif
    141 #ifdef EUSERS
    142     inscode(d, ds, de, "EUSERS", EUSERS, "Too many users");
    143 #else
    144 #ifdef WSAEUSERS
    145     inscode(d, ds, de, "EUSERS", WSAEUSERS, "Too many users");
    146 #endif
    147 #endif
    148 #ifdef ENOTEMPTY
    149     inscode(d, ds, de, "ENOTEMPTY", ENOTEMPTY, "Directory not empty");
    150 #else
    151 #ifdef WSAENOTEMPTY
    152     inscode(d, ds, de, "ENOTEMPTY", WSAENOTEMPTY, "Directory not empty");
    153 #endif
    154 #endif
    155 #ifdef ENOBUFS
    156     inscode(d, ds, de, "ENOBUFS", ENOBUFS, "No buffer space available");
    157 #else
    158 #ifdef WSAENOBUFS
    159     inscode(d, ds, de, "ENOBUFS", WSAENOBUFS, "No buffer space available");
    160 #endif
    161 #endif
    162 #ifdef EPROTO
    163     inscode(d, ds, de, "EPROTO", EPROTO, "Protocol error");
    164 #endif
    165 #ifdef EREMOTE
    166     inscode(d, ds, de, "EREMOTE", EREMOTE, "Object is remote");
    167 #else
    168 #ifdef WSAEREMOTE
    169     inscode(d, ds, de, "EREMOTE", WSAEREMOTE, "Object is remote");
    170 #endif
    171 #endif
    172 #ifdef ENAVAIL
    173     inscode(d, ds, de, "ENAVAIL", ENAVAIL, "No XENIX semaphores available");
    174 #endif
    175 #ifdef ECHILD
    176     inscode(d, ds, de, "ECHILD", ECHILD, "No child processes");
    177 #endif
    178 #ifdef ELOOP
    179     inscode(d, ds, de, "ELOOP", ELOOP, "Too many symbolic links encountered");
    180 #else
    181 #ifdef WSAELOOP
    182     inscode(d, ds, de, "ELOOP", WSAELOOP, "Too many symbolic links encountered");
    183 #endif
    184 #endif
    185 #ifdef EXDEV
    186     inscode(d, ds, de, "EXDEV", EXDEV, "Cross-device link");
    187 #endif
    188 #ifdef E2BIG
    189     inscode(d, ds, de, "E2BIG", E2BIG, "Arg list too long");
    190 #endif
    191 #ifdef ESRCH
    192     inscode(d, ds, de, "ESRCH", ESRCH, "No such process");
    193 #endif
    194 #ifdef EMSGSIZE
    195     inscode(d, ds, de, "EMSGSIZE", EMSGSIZE, "Message too long");
    196 #else
    197 #ifdef WSAEMSGSIZE
    198     inscode(d, ds, de, "EMSGSIZE", WSAEMSGSIZE, "Message too long");
    199 #endif
    200 #endif
    201 #ifdef EAFNOSUPPORT
    202     inscode(d, ds, de, "EAFNOSUPPORT", EAFNOSUPPORT, "Address family not supported by protocol");
    203 #else
    204 #ifdef WSAEAFNOSUPPORT
    205     inscode(d, ds, de, "EAFNOSUPPORT", WSAEAFNOSUPPORT, "Address family not supported by protocol");
    206 #endif
    207 #endif
    208 #ifdef EBADR
    209     inscode(d, ds, de, "EBADR", EBADR, "Invalid request descriptor");
    210 #endif
    211 #ifdef EHOSTDOWN
    212     inscode(d, ds, de, "EHOSTDOWN", EHOSTDOWN, "Host is down");
    213 #else
    214 #ifdef WSAEHOSTDOWN
    215     inscode(d, ds, de, "EHOSTDOWN", WSAEHOSTDOWN, "Host is down");
    216 #endif
    217 #endif
    218 #ifdef EPFNOSUPPORT
    219     inscode(d, ds, de, "EPFNOSUPPORT", EPFNOSUPPORT, "Protocol family not supported");
    220 #else
    221 #ifdef WSAEPFNOSUPPORT
    222     inscode(d, ds, de, "EPFNOSUPPORT", WSAEPFNOSUPPORT, "Protocol family not supported");
    223 #endif
    224 #endif
    225 #ifdef ENOPROTOOPT
    226     inscode(d, ds, de, "ENOPROTOOPT", ENOPROTOOPT, "Protocol not available");
    227 #else
    228 #ifdef WSAENOPROTOOPT
    229     inscode(d, ds, de, "ENOPROTOOPT", WSAENOPROTOOPT, "Protocol not available");
    230 #endif
    231 #endif
    232 #ifdef EBUSY
    233     inscode(d, ds, de, "EBUSY", EBUSY, "Device or resource busy");
    234 #endif
    235 #ifdef EWOULDBLOCK
    236     inscode(d, ds, de, "EWOULDBLOCK", EWOULDBLOCK, "Operation would block");
    237 #else
    238 #ifdef WSAEWOULDBLOCK
    239     inscode(d, ds, de, "EWOULDBLOCK", WSAEWOULDBLOCK, "Operation would block");
    240 #endif
    241 #endif
    242 #ifdef EBADFD
    243     inscode(d, ds, de, "EBADFD", EBADFD, "File descriptor in bad state");
    244 #endif
    245 #ifdef EDOTDOT
    246     inscode(d, ds, de, "EDOTDOT", EDOTDOT, "RFS specific error");
    247 #endif
    248 #ifdef EISCONN
    249     inscode(d, ds, de, "EISCONN", EISCONN, "Transport endpoint is already connected");
    250 #else
    251 #ifdef WSAEISCONN
    252     inscode(d, ds, de, "EISCONN", WSAEISCONN, "Transport endpoint is already connected");
    253 #endif
    254 #endif
    255 #ifdef ENOANO
    256     inscode(d, ds, de, "ENOANO", ENOANO, "No anode");
    257 #endif
    258 #ifdef ESHUTDOWN
    259     inscode(d, ds, de, "ESHUTDOWN", ESHUTDOWN, "Cannot send after transport endpoint shutdown");
    260 #else
    261 #ifdef WSAESHUTDOWN
    262     inscode(d, ds, de, "ESHUTDOWN", WSAESHUTDOWN, "Cannot send after transport endpoint shutdown");
    263 #endif
    264 #endif
    265 #ifdef ECHRNG
    266     inscode(d, ds, de, "ECHRNG", ECHRNG, "Channel number out of range");
    267 #endif
    268 #ifdef ELIBBAD
    269     inscode(d, ds, de, "ELIBBAD", ELIBBAD, "Accessing a corrupted shared library");
    270 #endif
    271 #ifdef ENONET
    272     inscode(d, ds, de, "ENONET", ENONET, "Machine is not on the network");
    273 #endif
    274 #ifdef EBADE
    275     inscode(d, ds, de, "EBADE", EBADE, "Invalid exchange");
    276 #endif
    277 #ifdef EBADF
    278     inscode(d, ds, de, "EBADF", EBADF, "Bad file number");
    279 #else
    280 #ifdef WSAEBADF
    281     inscode(d, ds, de, "EBADF", WSAEBADF, "Bad file number");
    282 #endif
    283 #endif
    284 #ifdef EMULTIHOP
    285     inscode(d, ds, de, "EMULTIHOP", EMULTIHOP, "Multihop attempted");
    286 #endif
    287 #ifdef EIO
    288     inscode(d, ds, de, "EIO", EIO, "I/O error");
    289 #endif
    290 #ifdef EUNATCH
    291     inscode(d, ds, de, "EUNATCH", EUNATCH, "Protocol driver not attached");
    292 #endif
    293 #ifdef EPROTOTYPE
    294     inscode(d, ds, de, "EPROTOTYPE", EPROTOTYPE, "Protocol wrong type for socket");
    295 #else
    296 #ifdef WSAEPROTOTYPE
    297     inscode(d, ds, de, "EPROTOTYPE", WSAEPROTOTYPE, "Protocol wrong type for socket");
    298 #endif
    299 #endif
    300 #ifdef ENOSPC
    301     inscode(d, ds, de, "ENOSPC", ENOSPC, "No space left on device");
    302 #endif
    303 #ifdef ENOEXEC
    304     inscode(d, ds, de, "ENOEXEC", ENOEXEC, "Exec format error");
    305 #endif
    306 #ifdef EALREADY
    307     inscode(d, ds, de, "EALREADY", EALREADY, "Operation already in progress");
    308 #else
    309 #ifdef WSAEALREADY
    310     inscode(d, ds, de, "EALREADY", WSAEALREADY, "Operation already in progress");
    311 #endif
    312 #endif
    313 #ifdef ENETDOWN
    314     inscode(d, ds, de, "ENETDOWN", ENETDOWN, "Network is down");
    315 #else
    316 #ifdef WSAENETDOWN
    317     inscode(d, ds, de, "ENETDOWN", WSAENETDOWN, "Network is down");
    318 #endif
    319 #endif
    320 #ifdef ENOTNAM
    321     inscode(d, ds, de, "ENOTNAM", ENOTNAM, "Not a XENIX named type file");
    322 #endif
    323 #ifdef EACCES
    324     inscode(d, ds, de, "EACCES", EACCES, "Permission denied");
    325 #else
    326 #ifdef WSAEACCES
    327     inscode(d, ds, de, "EACCES", WSAEACCES, "Permission denied");
    328 #endif
    329 #endif
    330 #ifdef ELNRNG
    331     inscode(d, ds, de, "ELNRNG", ELNRNG, "Link number out of range");
    332 #endif
    333 #ifdef EILSEQ
    334     inscode(d, ds, de, "EILSEQ", EILSEQ, "Illegal byte sequence");
    335 #endif
    336 #ifdef ENOTDIR
    337     inscode(d, ds, de, "ENOTDIR", ENOTDIR, "Not a directory");
    338 #endif
    339 #ifdef ENOTUNIQ
    340     inscode(d, ds, de, "ENOTUNIQ", ENOTUNIQ, "Name not unique on network");
    341 #endif
    342 #ifdef EPERM
    343     inscode(d, ds, de, "EPERM", EPERM, "Operation not permitted");
    344 #endif
    345 #ifdef EDOM
    346     inscode(d, ds, de, "EDOM", EDOM, "Math argument out of domain of func");
    347 #endif
    348 #ifdef EXFULL
    349     inscode(d, ds, de, "EXFULL", EXFULL, "Exchange full");
    350 #endif
    351 #ifdef ECONNREFUSED
    352     inscode(d, ds, de, "ECONNREFUSED", ECONNREFUSED, "Connection refused");
    353 #else
    354 #ifdef WSAECONNREFUSED
    355     inscode(d, ds, de, "ECONNREFUSED", WSAECONNREFUSED, "Connection refused");
    356 #endif
    357 #endif
    358 #ifdef EISDIR
    359     inscode(d, ds, de, "EISDIR", EISDIR, "Is a directory");
    360 #endif
    361 #ifdef EPROTONOSUPPORT
    362     inscode(d, ds, de, "EPROTONOSUPPORT", EPROTONOSUPPORT, "Protocol not supported");
    363 #else
    364 #ifdef WSAEPROTONOSUPPORT
    365     inscode(d, ds, de, "EPROTONOSUPPORT", WSAEPROTONOSUPPORT, "Protocol not supported");
    366 #endif
    367 #endif
    368 #ifdef EROFS
    369     inscode(d, ds, de, "EROFS", EROFS, "Read-only file system");
    370 #endif
    371 #ifdef EADDRNOTAVAIL
    372     inscode(d, ds, de, "EADDRNOTAVAIL", EADDRNOTAVAIL, "Cannot assign requested address");
    373 #else
    374 #ifdef WSAEADDRNOTAVAIL
    375     inscode(d, ds, de, "EADDRNOTAVAIL", WSAEADDRNOTAVAIL, "Cannot assign requested address");
    376 #endif
    377 #endif
    378 #ifdef EIDRM
    379     inscode(d, ds, de, "EIDRM", EIDRM, "Identifier removed");
    380 #endif
    381 #ifdef ECOMM
    382     inscode(d, ds, de, "ECOMM", ECOMM, "Communication error on send");
    383 #endif
    384 #ifdef ESRMNT
    385     inscode(d, ds, de, "ESRMNT", ESRMNT, "Srmount error");
    386 #endif
    387 #ifdef EREMOTEIO
    388     inscode(d, ds, de, "EREMOTEIO", EREMOTEIO, "Remote I/O error");
    389 #endif
    390 #ifdef EL3RST
    391     inscode(d, ds, de, "EL3RST", EL3RST, "Level 3 reset");
    392 #endif
    393 #ifdef EBADMSG
    394     inscode(d, ds, de, "EBADMSG", EBADMSG, "Not a data message");
    395 #endif
    396 #ifdef ENFILE
    397     inscode(d, ds, de, "ENFILE", ENFILE, "File table overflow");
    398 #endif
    399 #ifdef ELIBMAX
    400     inscode(d, ds, de, "ELIBMAX", ELIBMAX, "Attempting to link in too many shared libraries");
    401 #endif
    402 #ifdef ESPIPE
    403     inscode(d, ds, de, "ESPIPE", ESPIPE, "Illegal seek");
    404 #endif
    405 #ifdef ENOLINK
    406     inscode(d, ds, de, "ENOLINK", ENOLINK, "Link has been severed");
    407 #endif
    408 #ifdef ENETRESET
    409     inscode(d, ds, de, "ENETRESET", ENETRESET, "Network dropped connection because of reset");
    410 #else
    411 #ifdef WSAENETRESET
    412     inscode(d, ds, de, "ENETRESET", WSAENETRESET, "Network dropped connection because of reset");
    413 #endif
    414 #endif
    415 #ifdef ETIMEDOUT
    416     inscode(d, ds, de, "ETIMEDOUT", ETIMEDOUT, "Connection timed out");
    417 #else
    418 #ifdef WSAETIMEDOUT
    419     inscode(d, ds, de, "ETIMEDOUT", WSAETIMEDOUT, "Connection timed out");
    420 #endif
    421 #endif
    422 #ifdef ENOENT
    423     inscode(d, ds, de, "ENOENT", ENOENT, "No such file or directory");
    424 #endif
    425 #ifdef EEXIST
    426     inscode(d, ds, de, "EEXIST", EEXIST, "File exists");
    427 #endif
    428 #ifdef EDQUOT
    429     inscode(d, ds, de, "EDQUOT", EDQUOT, "Quota exceeded");
    430 #else
    431 #ifdef WSAEDQUOT
    432     inscode(d, ds, de, "EDQUOT", WSAEDQUOT, "Quota exceeded");
    433 #endif
    434 #endif
    435 #ifdef ENOSTR
    436     inscode(d, ds, de, "ENOSTR", ENOSTR, "Device not a stream");
    437 #endif
    438 #ifdef EBADSLT
    439     inscode(d, ds, de, "EBADSLT", EBADSLT, "Invalid slot");
    440 #endif
    441 #ifdef EBADRQC
    442     inscode(d, ds, de, "EBADRQC", EBADRQC, "Invalid request code");
    443 #endif
    444 #ifdef ELIBACC
    445     inscode(d, ds, de, "ELIBACC", ELIBACC, "Can not access a needed shared library");
    446 #endif
    447 #ifdef EFAULT
    448     inscode(d, ds, de, "EFAULT", EFAULT, "Bad address");
    449 #else
    450 #ifdef WSAEFAULT
    451     inscode(d, ds, de, "EFAULT", WSAEFAULT, "Bad address");
    452 #endif
    453 #endif
    454 #ifdef EFBIG
    455     inscode(d, ds, de, "EFBIG", EFBIG, "File too large");
    456 #endif
    457 #ifdef EDEADLK
    458     inscode(d, ds, de, "EDEADLK", EDEADLK, "Resource deadlock would occur");
    459 #endif
    460 #ifdef ENOTCONN
    461     inscode(d, ds, de, "ENOTCONN", ENOTCONN, "Transport endpoint is not connected");
    462 #else
    463 #ifdef WSAENOTCONN
    464     inscode(d, ds, de, "ENOTCONN", WSAENOTCONN, "Transport endpoint is not connected");
    465 #endif
    466 #endif
    467 #ifdef EDESTADDRREQ
    468     inscode(d, ds, de, "EDESTADDRREQ", EDESTADDRREQ, "Destination address required");
    469 #else
    470 #ifdef WSAEDESTADDRREQ
    471     inscode(d, ds, de, "EDESTADDRREQ", WSAEDESTADDRREQ, "Destination address required");
    472 #endif
    473 #endif
    474 #ifdef ELIBSCN
    475     inscode(d, ds, de, "ELIBSCN", ELIBSCN, ".lib section in a.out corrupted");
    476 #endif
    477 #ifdef ENOLCK
    478     inscode(d, ds, de, "ENOLCK", ENOLCK, "No record locks available");
    479 #endif
    480 #ifdef EISNAM
    481     inscode(d, ds, de, "EISNAM", EISNAM, "Is a named type file");
    482 #endif
    483 #ifdef ECONNABORTED
    484     inscode(d, ds, de, "ECONNABORTED", ECONNABORTED, "Software caused connection abort");
    485 #else
    486 #ifdef WSAECONNABORTED
    487     inscode(d, ds, de, "ECONNABORTED", WSAECONNABORTED, "Software caused connection abort");
    488 #endif
    489 #endif
    490 #ifdef ENETUNREACH
    491     inscode(d, ds, de, "ENETUNREACH", ENETUNREACH, "Network is unreachable");
    492 #else
    493 #ifdef WSAENETUNREACH
    494     inscode(d, ds, de, "ENETUNREACH", WSAENETUNREACH, "Network is unreachable");
    495 #endif
    496 #endif
    497 #ifdef ESTALE
    498     inscode(d, ds, de, "ESTALE", ESTALE, "Stale NFS file handle");
    499 #else
    500 #ifdef WSAESTALE
    501     inscode(d, ds, de, "ESTALE", WSAESTALE, "Stale NFS file handle");
    502 #endif
    503 #endif
    504 #ifdef ENOSR
    505     inscode(d, ds, de, "ENOSR", ENOSR, "Out of streams resources");
    506 #endif
    507 #ifdef ENOMEM
    508     inscode(d, ds, de, "ENOMEM", ENOMEM, "Out of memory");
    509 #endif
    510 #ifdef ENOTSOCK
    511     inscode(d, ds, de, "ENOTSOCK", ENOTSOCK, "Socket operation on non-socket");
    512 #else
    513 #ifdef WSAENOTSOCK
    514     inscode(d, ds, de, "ENOTSOCK", WSAENOTSOCK, "Socket operation on non-socket");
    515 #endif
    516 #endif
    517 #ifdef ESTRPIPE
    518     inscode(d, ds, de, "ESTRPIPE", ESTRPIPE, "Streams pipe error");
    519 #endif
    520 #ifdef EMLINK
    521     inscode(d, ds, de, "EMLINK", EMLINK, "Too many links");
    522 #endif
    523 #ifdef ERANGE
    524     inscode(d, ds, de, "ERANGE", ERANGE, "Math result not representable");
    525 #endif
    526 #ifdef ELIBEXEC
    527     inscode(d, ds, de, "ELIBEXEC", ELIBEXEC, "Cannot exec a shared library directly");
    528 #endif
    529 #ifdef EL3HLT
    530     inscode(d, ds, de, "EL3HLT", EL3HLT, "Level 3 halted");
    531 #endif
    532 #ifdef ECONNRESET
    533     inscode(d, ds, de, "ECONNRESET", ECONNRESET, "Connection reset by peer");
    534 #else
    535 #ifdef WSAECONNRESET
    536     inscode(d, ds, de, "ECONNRESET", WSAECONNRESET, "Connection reset by peer");
    537 #endif
    538 #endif
    539 #ifdef EADDRINUSE
    540     inscode(d, ds, de, "EADDRINUSE", EADDRINUSE, "Address already in use");
    541 #else
    542 #ifdef WSAEADDRINUSE
    543     inscode(d, ds, de, "EADDRINUSE", WSAEADDRINUSE, "Address already in use");
    544 #endif
    545 #endif
    546 #ifdef EOPNOTSUPP
    547     inscode(d, ds, de, "EOPNOTSUPP", EOPNOTSUPP, "Operation not supported on transport endpoint");
    548 #else
    549 #ifdef WSAEOPNOTSUPP
    550     inscode(d, ds, de, "EOPNOTSUPP", WSAEOPNOTSUPP, "Operation not supported on transport endpoint");
    551 #endif
    552 #endif
    553 #ifdef EREMCHG
    554     inscode(d, ds, de, "EREMCHG", EREMCHG, "Remote address changed");
    555 #endif
    556 #ifdef EAGAIN
    557     inscode(d, ds, de, "EAGAIN", EAGAIN, "Try again");
    558 #endif
    559 #ifdef ENAMETOOLONG
    560     inscode(d, ds, de, "ENAMETOOLONG", ENAMETOOLONG, "File name too long");
    561 #else
    562 #ifdef WSAENAMETOOLONG
    563     inscode(d, ds, de, "ENAMETOOLONG", WSAENAMETOOLONG, "File name too long");
    564 #endif
    565 #endif
    566 #ifdef ENOTTY
    567     inscode(d, ds, de, "ENOTTY", ENOTTY, "Not a typewriter");
    568 #endif
    569 #ifdef ERESTART
    570     inscode(d, ds, de, "ERESTART", ERESTART, "Interrupted system call should be restarted");
    571 #endif
    572 #ifdef ESOCKTNOSUPPORT
    573     inscode(d, ds, de, "ESOCKTNOSUPPORT", ESOCKTNOSUPPORT, "Socket type not supported");
    574 #else
    575 #ifdef WSAESOCKTNOSUPPORT
    576     inscode(d, ds, de, "ESOCKTNOSUPPORT", WSAESOCKTNOSUPPORT, "Socket type not supported");
    577 #endif
    578 #endif
    579 #ifdef ETIME
    580     inscode(d, ds, de, "ETIME", ETIME, "Timer expired");
    581 #endif
    582 #ifdef EBFONT
    583     inscode(d, ds, de, "EBFONT", EBFONT, "Bad font file format");
    584 #endif
    585 #ifdef EDEADLOCK
    586     inscode(d, ds, de, "EDEADLOCK", EDEADLOCK, "Error EDEADLOCK");
    587 #endif
    588 #ifdef ETOOMANYREFS
    589     inscode(d, ds, de, "ETOOMANYREFS", ETOOMANYREFS, "Too many references: cannot splice");
    590 #else
    591 #ifdef WSAETOOMANYREFS
    592     inscode(d, ds, de, "ETOOMANYREFS", WSAETOOMANYREFS, "Too many references: cannot splice");
    593 #endif
    594 #endif
    595 #ifdef EMFILE
    596     inscode(d, ds, de, "EMFILE", EMFILE, "Too many open files");
    597 #else
    598 #ifdef WSAEMFILE
    599     inscode(d, ds, de, "EMFILE", WSAEMFILE, "Too many open files");
    600 #endif
    601 #endif
    602 #ifdef ETXTBSY
    603     inscode(d, ds, de, "ETXTBSY", ETXTBSY, "Text file busy");
    604 #endif
    605 #ifdef EINPROGRESS
    606     inscode(d, ds, de, "EINPROGRESS", EINPROGRESS, "Operation now in progress");
    607 #else
    608 #ifdef WSAEINPROGRESS
    609     inscode(d, ds, de, "EINPROGRESS", WSAEINPROGRESS, "Operation now in progress");
    610 #endif
    611 #endif
    612 #ifdef ENXIO
    613     inscode(d, ds, de, "ENXIO", ENXIO, "No such device or address");
    614 #endif
    615 #ifdef ENOPKG
    616     inscode(d, ds, de, "ENOPKG", ENOPKG, "Package not installed");
    617 #endif
    618 #ifdef WSASY
    619     inscode(d, ds, de, "WSASY", WSASY, "Error WSASY");
    620 #endif
    621 #ifdef WSAEHOSTDOWN
    622     inscode(d, ds, de, "WSAEHOSTDOWN", WSAEHOSTDOWN, "Host is down");
    623 #endif
    624 #ifdef WSAENETDOWN
    625     inscode(d, ds, de, "WSAENETDOWN", WSAENETDOWN, "Network is down");
    626 #endif
    627 #ifdef WSAENOTSOCK
    628     inscode(d, ds, de, "WSAENOTSOCK", WSAENOTSOCK, "Socket operation on non-socket");
    629 #endif
    630 #ifdef WSAEHOSTUNREACH
    631     inscode(d, ds, de, "WSAEHOSTUNREACH", WSAEHOSTUNREACH, "No route to host");
    632 #endif
    633 #ifdef WSAELOOP
    634     inscode(d, ds, de, "WSAELOOP", WSAELOOP, "Too many symbolic links encountered");
    635 #endif
    636 #ifdef WSAEMFILE
    637     inscode(d, ds, de, "WSAEMFILE", WSAEMFILE, "Too many open files");
    638 #endif
    639 #ifdef WSAESTALE
    640     inscode(d, ds, de, "WSAESTALE", WSAESTALE, "Stale NFS file handle");
    641 #endif
    642 #ifdef WSAVERNOTSUPPORTED
    643     inscode(d, ds, de, "WSAVERNOTSUPPORTED", WSAVERNOTSUPPORTED, "Error WSAVERNOTSUPPORTED");
    644 #endif
    645 #ifdef WSAENETUNREACH
    646     inscode(d, ds, de, "WSAENETUNREACH", WSAENETUNREACH, "Network is unreachable");
    647 #endif
    648 #ifdef WSAEPROCLIM
    649     inscode(d, ds, de, "WSAEPROCLIM", WSAEPROCLIM, "Error WSAEPROCLIM");
    650 #endif
    651 #ifdef WSAEFAULT
    652     inscode(d, ds, de, "WSAEFAULT", WSAEFAULT, "Bad address");
    653 #endif
    654 #ifdef WSANOTINITIALISED
    655     inscode(d, ds, de, "WSANOTINITIALISED", WSANOTINITIALISED, "Error WSANOTINITIALISED");
    656 #endif
    657 #ifdef WSAEUSERS
    658     inscode(d, ds, de, "WSAEUSERS", WSAEUSERS, "Too many users");
    659 #endif
    660 #ifdef WSAMAKEASYNCREPL
    661     inscode(d, ds, de, "WSAMAKEASYNCREPL", WSAMAKEASYNCREPL, "Error WSAMAKEASYNCREPL");
    662 #endif
    663 #ifdef WSAENOPROTOOPT
    664     inscode(d, ds, de, "WSAENOPROTOOPT", WSAENOPROTOOPT, "Protocol not available");
    665 #endif
    666 #ifdef WSAECONNABORTED
    667     inscode(d, ds, de, "WSAECONNABORTED", WSAECONNABORTED, "Software caused connection abort");
    668 #endif
    669 #ifdef WSAENAMETOOLONG
    670     inscode(d, ds, de, "WSAENAMETOOLONG", WSAENAMETOOLONG, "File name too long");
    671 #endif
    672 #ifdef WSAENOTEMPTY
    673     inscode(d, ds, de, "WSAENOTEMPTY", WSAENOTEMPTY, "Directory not empty");
    674 #endif
    675 #ifdef WSAESHUTDOWN
    676     inscode(d, ds, de, "WSAESHUTDOWN", WSAESHUTDOWN, "Cannot send after transport endpoint shutdown");
    677 #endif
    678 #ifdef WSAEAFNOSUPPORT
    679     inscode(d, ds, de, "WSAEAFNOSUPPORT", WSAEAFNOSUPPORT, "Address family not supported by protocol");
    680 #endif
    681 #ifdef WSAETOOMANYREFS
    682     inscode(d, ds, de, "WSAETOOMANYREFS", WSAETOOMANYREFS, "Too many references: cannot splice");
    683 #endif
    684 #ifdef WSAEACCES
    685     inscode(d, ds, de, "WSAEACCES", WSAEACCES, "Permission denied");
    686 #endif
    687 #ifdef WSATR
    688     inscode(d, ds, de, "WSATR", WSATR, "Error WSATR");
    689 #endif
    690 #ifdef WSABASEERR
    691     inscode(d, ds, de, "WSABASEERR", WSABASEERR, "Error WSABASEERR");
    692 #endif
    693 #ifdef WSADESCRIPTIO
    694     inscode(d, ds, de, "WSADESCRIPTIO", WSADESCRIPTIO, "Error WSADESCRIPTIO");
    695 #endif
    696 #ifdef WSAEMSGSIZE
    697     inscode(d, ds, de, "WSAEMSGSIZE", WSAEMSGSIZE, "Message too long");
    698 #endif
    699 #ifdef WSAEBADF
    700     inscode(d, ds, de, "WSAEBADF", WSAEBADF, "Bad file number");
    701 #endif
    702 #ifdef WSAECONNRESET
    703     inscode(d, ds, de, "WSAECONNRESET", WSAECONNRESET, "Connection reset by peer");
    704 #endif
    705 #ifdef WSAGETSELECTERRO
    706     inscode(d, ds, de, "WSAGETSELECTERRO", WSAGETSELECTERRO, "Error WSAGETSELECTERRO");
    707 #endif
    708 #ifdef WSAETIMEDOUT
    709     inscode(d, ds, de, "WSAETIMEDOUT", WSAETIMEDOUT, "Connection timed out");
    710 #endif
    711 #ifdef WSAENOBUFS
    712     inscode(d, ds, de, "WSAENOBUFS", WSAENOBUFS, "No buffer space available");
    713 #endif
    714 #ifdef WSAEDISCON
    715     inscode(d, ds, de, "WSAEDISCON", WSAEDISCON, "Error WSAEDISCON");
    716 #endif
    717 #ifdef WSAEINTR
    718     inscode(d, ds, de, "WSAEINTR", WSAEINTR, "Interrupted system call");
    719 #endif
    720 #ifdef WSAEPROTOTYPE
    721     inscode(d, ds, de, "WSAEPROTOTYPE", WSAEPROTOTYPE, "Protocol wrong type for socket");
    722 #endif
    723 #ifdef WSAHOS
    724     inscode(d, ds, de, "WSAHOS", WSAHOS, "Error WSAHOS");
    725 #endif
    726 #ifdef WSAEADDRINUSE
    727     inscode(d, ds, de, "WSAEADDRINUSE", WSAEADDRINUSE, "Address already in use");
    728 #endif
    729 #ifdef WSAEADDRNOTAVAIL
    730     inscode(d, ds, de, "WSAEADDRNOTAVAIL", WSAEADDRNOTAVAIL, "Cannot assign requested address");
    731 #endif
    732 #ifdef WSAEALREADY
    733     inscode(d, ds, de, "WSAEALREADY", WSAEALREADY, "Operation already in progress");
    734 #endif
    735 #ifdef WSAEPROTONOSUPPORT
    736     inscode(d, ds, de, "WSAEPROTONOSUPPORT", WSAEPROTONOSUPPORT, "Protocol not supported");
    737 #endif
    738 #ifdef WSASYSNOTREADY
    739     inscode(d, ds, de, "WSASYSNOTREADY", WSASYSNOTREADY, "Error WSASYSNOTREADY");
    740 #endif
    741 #ifdef WSAEWOULDBLOCK
    742     inscode(d, ds, de, "WSAEWOULDBLOCK", WSAEWOULDBLOCK, "Operation would block");
    743 #endif
    744 #ifdef WSAEPFNOSUPPORT
    745     inscode(d, ds, de, "WSAEPFNOSUPPORT", WSAEPFNOSUPPORT, "Protocol family not supported");
    746 #endif
    747 #ifdef WSAEOPNOTSUPP
    748     inscode(d, ds, de, "WSAEOPNOTSUPP", WSAEOPNOTSUPP, "Operation not supported on transport endpoint");
    749 #endif
    750 #ifdef WSAEISCONN
    751     inscode(d, ds, de, "WSAEISCONN", WSAEISCONN, "Transport endpoint is already connected");
    752 #endif
    753 #ifdef WSAEDQUOT
    754     inscode(d, ds, de, "WSAEDQUOT", WSAEDQUOT, "Quota exceeded");
    755 #endif
    756 #ifdef WSAENOTCONN
    757     inscode(d, ds, de, "WSAENOTCONN", WSAENOTCONN, "Transport endpoint is not connected");
    758 #endif
    759 #ifdef WSAEREMOTE
    760     inscode(d, ds, de, "WSAEREMOTE", WSAEREMOTE, "Object is remote");
    761 #endif
    762 #ifdef WSAEINVAL
    763     inscode(d, ds, de, "WSAEINVAL", WSAEINVAL, "Invalid argument");
    764 #endif
    765 #ifdef WSAEINPROGRESS
    766     inscode(d, ds, de, "WSAEINPROGRESS", WSAEINPROGRESS, "Operation now in progress");
    767 #endif
    768 #ifdef WSAGETSELECTEVEN
    769     inscode(d, ds, de, "WSAGETSELECTEVEN", WSAGETSELECTEVEN, "Error WSAGETSELECTEVEN");
    770 #endif
    771 #ifdef WSAESOCKTNOSUPPORT
    772     inscode(d, ds, de, "WSAESOCKTNOSUPPORT", WSAESOCKTNOSUPPORT, "Socket type not supported");
    773 #endif
    774 #ifdef WSAGETASYNCERRO
    775     inscode(d, ds, de, "WSAGETASYNCERRO", WSAGETASYNCERRO, "Error WSAGETASYNCERRO");
    776 #endif
    777 #ifdef WSAMAKESELECTREPL
    778     inscode(d, ds, de, "WSAMAKESELECTREPL", WSAMAKESELECTREPL, "Error WSAMAKESELECTREPL");
    779 #endif
    780 #ifdef WSAGETASYNCBUFLE
    781     inscode(d, ds, de, "WSAGETASYNCBUFLE", WSAGETASYNCBUFLE, "Error WSAGETASYNCBUFLE");
    782 #endif
    783 #ifdef WSAEDESTADDRREQ
    784     inscode(d, ds, de, "WSAEDESTADDRREQ", WSAEDESTADDRREQ, "Destination address required");
    785 #endif
    786 #ifdef WSAECONNREFUSED
    787     inscode(d, ds, de, "WSAECONNREFUSED", WSAECONNREFUSED, "Connection refused");
    788 #endif
    789 #ifdef WSAENETRESET
    790     inscode(d, ds, de, "WSAENETRESET", WSAENETRESET, "Network dropped connection because of reset");
    791 #endif
    792 #ifdef WSAN
    793     inscode(d, ds, de, "WSAN", WSAN, "Error WSAN");
    794 #endif
    795 
    796 /* These symbols are added for EDK II support.  */
    797 #ifdef EMINERRORVAL
    798   inscode(d, ds, de, "EMINERRORVAL", EMINERRORVAL, "Lowest valid error value");
    799 #endif
    800 #ifdef ENOTSUP
    801   inscode(d, ds, de, "ENOTSUP", ENOTSUP, "Operation not supported");
    802 #endif
    803 #ifdef EBADRPC
    804   inscode(d, ds, de, "EBADRPC", EBADRPC, "RPC struct is bad");
    805 #endif
    806 #ifdef ERPCMISMATCH
    807   inscode(d, ds, de, "ERPCMISMATCH", ERPCMISMATCH, "RPC version wrong");
    808 #endif
    809 #ifdef EPROGUNAVAIL
    810   inscode(d, ds, de, "EPROGUNAVAIL", EPROGUNAVAIL, "RPC prog. not avail");
    811 #endif
    812 #ifdef EPROGMISMATCH
    813   inscode(d, ds, de, "EPROGMISMATCH", EPROGMISMATCH, "Program version wrong");
    814 #endif
    815 #ifdef EPROCUNAVAIL
    816   inscode(d, ds, de, "EPROCUNAVAIL", EPROCUNAVAIL, "Bad procedure for program");
    817 #endif
    818 #ifdef EFTYPE
    819   inscode(d, ds, de, "EFTYPE", EFTYPE, "Inappropriate file type or format");
    820 #endif
    821 #ifdef EAUTH
    822   inscode(d, ds, de, "EAUTH", EAUTH, "Authentication error");
    823 #endif
    824 #ifdef ENEEDAUTH
    825   inscode(d, ds, de, "ENEEDAUTH", ENEEDAUTH, "Need authenticator");
    826 #endif
    827 #ifdef ECANCELED
    828   inscode(d, ds, de, "ECANCELED", ECANCELED, "Operation canceled");
    829 #endif
    830 #ifdef ENOATTR
    831   inscode(d, ds, de, "ENOATTR", ENOATTR, "Attribute not found");
    832 #endif
    833 #ifdef EDOOFUS
    834   inscode(d, ds, de, "EDOOFUS", EDOOFUS, "Programming Error");
    835 #endif
    836 #ifdef EBUFSIZE
    837   inscode(d, ds, de, "EBUFSIZE", EBUFSIZE, "Buffer too small to hold result");
    838 #endif
    839 #ifdef EMAXERRORVAL
    840   inscode(d, ds, de, "EMAXERRORVAL", EMAXERRORVAL, "One more than the highest defined error value");
    841 #endif
    842 
    843     Py_DECREF(de);
    844 }
    845