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 
43 static PyMethodDef errno_methods[] = {
44     {NULL,              NULL}
45 };
46 
47 /* Helper function doing the dictionary inserting */
48 
49 static int
_add_errcode(PyObject * module_dict,PyObject * error_dict,const char * name_str,int code_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;
73 end:
74     Py_DECREF(name);
75     Py_DECREF(code);
76     return ret;
77 }
78 
79 static int
errno_exec(PyObject * module)80 errno_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 
928 static PyModuleDef_Slot errno_slots[] = {
929     {Py_mod_exec, errno_exec},
930     {0, NULL}
931 };
932 
933 PyDoc_STRVAR(errno__doc__,
934 "This module makes available standard errno system symbols.\n\
935 \n\
936 The value of each symbol is the corresponding integer value,\n\
937 e.g., on most systems, errno.ENOENT equals the integer 2.\n\
938 \n\
939 The dictionary errno.errorcode maps numeric codes to symbol names,\n\
940 e.g., errno.errorcode[2] could be the string 'ENOENT'.\n\
941 \n\
942 Symbols that are not relevant to the underlying system are not defined.\n\
943 \n\
944 To map error codes to error messages, use the function os.strerror(),\n\
945 e.g. os.strerror(2) could return 'No such file or directory'.");
946 
947 static 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 
956 PyMODINIT_FUNC
PyInit_errno(void)957 PyInit_errno(void)
958 {
959     return PyModuleDef_Init(&errnomodule);
960 }
961