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