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 #if defined(__wasi__) && !defined(ESHUTDOWN)
284 // WASI SDK 16 does not have ESHUTDOWN, shutdown results in EPIPE.
285 #define ESHUTDOWN EPIPE
286 #endif
287 #ifdef ESHUTDOWN
288 add_errcode("ESHUTDOWN", ESHUTDOWN, "Cannot send after transport endpoint shutdown");
289 #else
290 #ifdef WSAESHUTDOWN
291 add_errcode("ESHUTDOWN", WSAESHUTDOWN, "Cannot send after transport endpoint shutdown");
292 #endif
293 #endif
294 #ifdef ECHRNG
295 add_errcode("ECHRNG", ECHRNG, "Channel number out of range");
296 #endif
297 #ifdef ELIBBAD
298 add_errcode("ELIBBAD", ELIBBAD, "Accessing a corrupted shared library");
299 #endif
300 #ifdef ENONET
301 add_errcode("ENONET", ENONET, "Machine is not on the network");
302 #endif
303 #ifdef EBADE
304 add_errcode("EBADE", EBADE, "Invalid exchange");
305 #endif
306 #ifdef EBADF
307 add_errcode("EBADF", EBADF, "Bad file number");
308 #else
309 #ifdef WSAEBADF
310 add_errcode("EBADF", WSAEBADF, "Bad file number");
311 #endif
312 #endif
313 #ifdef EMULTIHOP
314 add_errcode("EMULTIHOP", EMULTIHOP, "Multihop attempted");
315 #endif
316 #ifdef EIO
317 add_errcode("EIO", EIO, "I/O error");
318 #endif
319 #ifdef EUNATCH
320 add_errcode("EUNATCH", EUNATCH, "Protocol driver not attached");
321 #endif
322 #ifdef EPROTOTYPE
323 add_errcode("EPROTOTYPE", EPROTOTYPE, "Protocol wrong type for socket");
324 #else
325 #ifdef WSAEPROTOTYPE
326 add_errcode("EPROTOTYPE", WSAEPROTOTYPE, "Protocol wrong type for socket");
327 #endif
328 #endif
329 #ifdef ENOSPC
330 add_errcode("ENOSPC", ENOSPC, "No space left on device");
331 #endif
332 #ifdef ENOEXEC
333 add_errcode("ENOEXEC", ENOEXEC, "Exec format error");
334 #endif
335 #ifdef EALREADY
336 add_errcode("EALREADY", EALREADY, "Operation already in progress");
337 #else
338 #ifdef WSAEALREADY
339 add_errcode("EALREADY", WSAEALREADY, "Operation already in progress");
340 #endif
341 #endif
342 #ifdef ENETDOWN
343 add_errcode("ENETDOWN", ENETDOWN, "Network is down");
344 #else
345 #ifdef WSAENETDOWN
346 add_errcode("ENETDOWN", WSAENETDOWN, "Network is down");
347 #endif
348 #endif
349 #ifdef ENOTNAM
350 add_errcode("ENOTNAM", ENOTNAM, "Not a XENIX named type file");
351 #endif
352 #ifdef EACCES
353 add_errcode("EACCES", EACCES, "Permission denied");
354 #else
355 #ifdef WSAEACCES
356 add_errcode("EACCES", WSAEACCES, "Permission denied");
357 #endif
358 #endif
359 #ifdef ELNRNG
360 add_errcode("ELNRNG", ELNRNG, "Link number out of range");
361 #endif
362 #ifdef EILSEQ
363 add_errcode("EILSEQ", EILSEQ, "Illegal byte sequence");
364 #endif
365 #ifdef ENOTDIR
366 add_errcode("ENOTDIR", ENOTDIR, "Not a directory");
367 #endif
368 #ifdef ENOTUNIQ
369 add_errcode("ENOTUNIQ", ENOTUNIQ, "Name not unique on network");
370 #endif
371 #ifdef EPERM
372 add_errcode("EPERM", EPERM, "Operation not permitted");
373 #endif
374 #ifdef EDOM
375 add_errcode("EDOM", EDOM, "Math argument out of domain of func");
376 #endif
377 #ifdef EXFULL
378 add_errcode("EXFULL", EXFULL, "Exchange full");
379 #endif
380 #ifdef ECONNREFUSED
381 add_errcode("ECONNREFUSED", ECONNREFUSED, "Connection refused");
382 #else
383 #ifdef WSAECONNREFUSED
384 add_errcode("ECONNREFUSED", WSAECONNREFUSED, "Connection refused");
385 #endif
386 #endif
387 #ifdef EISDIR
388 add_errcode("EISDIR", EISDIR, "Is a directory");
389 #endif
390 #ifdef EPROTONOSUPPORT
391 add_errcode("EPROTONOSUPPORT", EPROTONOSUPPORT, "Protocol not supported");
392 #else
393 #ifdef WSAEPROTONOSUPPORT
394 add_errcode("EPROTONOSUPPORT", WSAEPROTONOSUPPORT, "Protocol not supported");
395 #endif
396 #endif
397 #ifdef EROFS
398 add_errcode("EROFS", EROFS, "Read-only file system");
399 #endif
400 #ifdef EADDRNOTAVAIL
401 add_errcode("EADDRNOTAVAIL", EADDRNOTAVAIL, "Cannot assign requested address");
402 #else
403 #ifdef WSAEADDRNOTAVAIL
404 add_errcode("EADDRNOTAVAIL", WSAEADDRNOTAVAIL, "Cannot assign requested address");
405 #endif
406 #endif
407 #ifdef EIDRM
408 add_errcode("EIDRM", EIDRM, "Identifier removed");
409 #endif
410 #ifdef ECOMM
411 add_errcode("ECOMM", ECOMM, "Communication error on send");
412 #endif
413 #ifdef ESRMNT
414 add_errcode("ESRMNT", ESRMNT, "Srmount error");
415 #endif
416 #ifdef EREMOTEIO
417 add_errcode("EREMOTEIO", EREMOTEIO, "Remote I/O error");
418 #endif
419 #ifdef EL3RST
420 add_errcode("EL3RST", EL3RST, "Level 3 reset");
421 #endif
422 #ifdef EBADMSG
423 add_errcode("EBADMSG", EBADMSG, "Not a data message");
424 #endif
425 #ifdef ENFILE
426 add_errcode("ENFILE", ENFILE, "File table overflow");
427 #endif
428 #ifdef ELIBMAX
429 add_errcode("ELIBMAX", ELIBMAX, "Attempting to link in too many shared libraries");
430 #endif
431 #ifdef ESPIPE
432 add_errcode("ESPIPE", ESPIPE, "Illegal seek");
433 #endif
434 #ifdef ENOLINK
435 add_errcode("ENOLINK", ENOLINK, "Link has been severed");
436 #endif
437 #ifdef ENETRESET
438 add_errcode("ENETRESET", ENETRESET, "Network dropped connection because of reset");
439 #else
440 #ifdef WSAENETRESET
441 add_errcode("ENETRESET", WSAENETRESET, "Network dropped connection because of reset");
442 #endif
443 #endif
444 #ifdef ETIMEDOUT
445 add_errcode("ETIMEDOUT", ETIMEDOUT, "Connection timed out");
446 #else
447 #ifdef WSAETIMEDOUT
448 add_errcode("ETIMEDOUT", WSAETIMEDOUT, "Connection timed out");
449 #endif
450 #endif
451 #ifdef ENOENT
452 add_errcode("ENOENT", ENOENT, "No such file or directory");
453 #endif
454 #ifdef EEXIST
455 add_errcode("EEXIST", EEXIST, "File exists");
456 #endif
457 #ifdef EDQUOT
458 add_errcode("EDQUOT", EDQUOT, "Quota exceeded");
459 #else
460 #ifdef WSAEDQUOT
461 add_errcode("EDQUOT", WSAEDQUOT, "Quota exceeded");
462 #endif
463 #endif
464 #ifdef ENOSTR
465 add_errcode("ENOSTR", ENOSTR, "Device not a stream");
466 #endif
467 #ifdef EBADSLT
468 add_errcode("EBADSLT", EBADSLT, "Invalid slot");
469 #endif
470 #ifdef EBADRQC
471 add_errcode("EBADRQC", EBADRQC, "Invalid request code");
472 #endif
473 #ifdef ELIBACC
474 add_errcode("ELIBACC", ELIBACC, "Can not access a needed shared library");
475 #endif
476 #ifdef EFAULT
477 add_errcode("EFAULT", EFAULT, "Bad address");
478 #else
479 #ifdef WSAEFAULT
480 add_errcode("EFAULT", WSAEFAULT, "Bad address");
481 #endif
482 #endif
483 #ifdef EFBIG
484 add_errcode("EFBIG", EFBIG, "File too large");
485 #endif
486 #ifdef EDEADLK
487 add_errcode("EDEADLK", EDEADLK, "Resource deadlock would occur");
488 #endif
489 #ifdef ENOTCONN
490 add_errcode("ENOTCONN", ENOTCONN, "Transport endpoint is not connected");
491 #else
492 #ifdef WSAENOTCONN
493 add_errcode("ENOTCONN", WSAENOTCONN, "Transport endpoint is not connected");
494 #endif
495 #endif
496 #ifdef EDESTADDRREQ
497 add_errcode("EDESTADDRREQ", EDESTADDRREQ, "Destination address required");
498 #else
499 #ifdef WSAEDESTADDRREQ
500 add_errcode("EDESTADDRREQ", WSAEDESTADDRREQ, "Destination address required");
501 #endif
502 #endif
503 #ifdef ELIBSCN
504 add_errcode("ELIBSCN", ELIBSCN, ".lib section in a.out corrupted");
505 #endif
506 #ifdef ENOLCK
507 add_errcode("ENOLCK", ENOLCK, "No record locks available");
508 #endif
509 #ifdef EISNAM
510 add_errcode("EISNAM", EISNAM, "Is a named type file");
511 #endif
512 #ifdef ECONNABORTED
513 add_errcode("ECONNABORTED", ECONNABORTED, "Software caused connection abort");
514 #else
515 #ifdef WSAECONNABORTED
516 add_errcode("ECONNABORTED", WSAECONNABORTED, "Software caused connection abort");
517 #endif
518 #endif
519 #ifdef ENETUNREACH
520 add_errcode("ENETUNREACH", ENETUNREACH, "Network is unreachable");
521 #else
522 #ifdef WSAENETUNREACH
523 add_errcode("ENETUNREACH", WSAENETUNREACH, "Network is unreachable");
524 #endif
525 #endif
526 #ifdef ESTALE
527 add_errcode("ESTALE", ESTALE, "Stale NFS file handle");
528 #else
529 #ifdef WSAESTALE
530 add_errcode("ESTALE", WSAESTALE, "Stale NFS file handle");
531 #endif
532 #endif
533 #ifdef ENOSR
534 add_errcode("ENOSR", ENOSR, "Out of streams resources");
535 #endif
536 #ifdef ENOMEM
537 add_errcode("ENOMEM", ENOMEM, "Out of memory");
538 #endif
539 #ifdef ENOTSOCK
540 add_errcode("ENOTSOCK", ENOTSOCK, "Socket operation on non-socket");
541 #else
542 #ifdef WSAENOTSOCK
543 add_errcode("ENOTSOCK", WSAENOTSOCK, "Socket operation on non-socket");
544 #endif
545 #endif
546 #ifdef ESTRPIPE
547 add_errcode("ESTRPIPE", ESTRPIPE, "Streams pipe error");
548 #endif
549 #ifdef EMLINK
550 add_errcode("EMLINK", EMLINK, "Too many links");
551 #endif
552 #ifdef ERANGE
553 add_errcode("ERANGE", ERANGE, "Math result not representable");
554 #endif
555 #ifdef ELIBEXEC
556 add_errcode("ELIBEXEC", ELIBEXEC, "Cannot exec a shared library directly");
557 #endif
558 #ifdef EL3HLT
559 add_errcode("EL3HLT", EL3HLT, "Level 3 halted");
560 #endif
561 #ifdef ECONNRESET
562 add_errcode("ECONNRESET", ECONNRESET, "Connection reset by peer");
563 #else
564 #ifdef WSAECONNRESET
565 add_errcode("ECONNRESET", WSAECONNRESET, "Connection reset by peer");
566 #endif
567 #endif
568 #ifdef EADDRINUSE
569 add_errcode("EADDRINUSE", EADDRINUSE, "Address already in use");
570 #else
571 #ifdef WSAEADDRINUSE
572 add_errcode("EADDRINUSE", WSAEADDRINUSE, "Address already in use");
573 #endif
574 #endif
575 #ifdef EOPNOTSUPP
576 add_errcode("EOPNOTSUPP", EOPNOTSUPP, "Operation not supported on transport endpoint");
577 #else
578 #ifdef WSAEOPNOTSUPP
579 add_errcode("EOPNOTSUPP", WSAEOPNOTSUPP, "Operation not supported on transport endpoint");
580 #endif
581 #endif
582 #ifdef EREMCHG
583 add_errcode("EREMCHG", EREMCHG, "Remote address changed");
584 #endif
585 #ifdef EAGAIN
586 add_errcode("EAGAIN", EAGAIN, "Try again");
587 #endif
588 #ifdef ENAMETOOLONG
589 add_errcode("ENAMETOOLONG", ENAMETOOLONG, "File name too long");
590 #else
591 #ifdef WSAENAMETOOLONG
592 add_errcode("ENAMETOOLONG", WSAENAMETOOLONG, "File name too long");
593 #endif
594 #endif
595 #ifdef ENOTTY
596 add_errcode("ENOTTY", ENOTTY, "Not a typewriter");
597 #endif
598 #ifdef ERESTART
599 add_errcode("ERESTART", ERESTART, "Interrupted system call should be restarted");
600 #endif
601 #ifdef ESOCKTNOSUPPORT
602 add_errcode("ESOCKTNOSUPPORT", ESOCKTNOSUPPORT, "Socket type not supported");
603 #else
604 #ifdef WSAESOCKTNOSUPPORT
605 add_errcode("ESOCKTNOSUPPORT", WSAESOCKTNOSUPPORT, "Socket type not supported");
606 #endif
607 #endif
608 #ifdef ETIME
609 add_errcode("ETIME", ETIME, "Timer expired");
610 #endif
611 #ifdef EBFONT
612 add_errcode("EBFONT", EBFONT, "Bad font file format");
613 #endif
614 #ifdef EDEADLOCK
615 add_errcode("EDEADLOCK", EDEADLOCK, "Error EDEADLOCK");
616 #endif
617 #ifdef ETOOMANYREFS
618 add_errcode("ETOOMANYREFS", ETOOMANYREFS, "Too many references: cannot splice");
619 #else
620 #ifdef WSAETOOMANYREFS
621 add_errcode("ETOOMANYREFS", WSAETOOMANYREFS, "Too many references: cannot splice");
622 #endif
623 #endif
624 #ifdef EMFILE
625 add_errcode("EMFILE", EMFILE, "Too many open files");
626 #else
627 #ifdef WSAEMFILE
628 add_errcode("EMFILE", WSAEMFILE, "Too many open files");
629 #endif
630 #endif
631 #ifdef ETXTBSY
632 add_errcode("ETXTBSY", ETXTBSY, "Text file busy");
633 #endif
634 #ifdef EINPROGRESS
635 add_errcode("EINPROGRESS", EINPROGRESS, "Operation now in progress");
636 #else
637 #ifdef WSAEINPROGRESS
638 add_errcode("EINPROGRESS", WSAEINPROGRESS, "Operation now in progress");
639 #endif
640 #endif
641 #ifdef ENXIO
642 add_errcode("ENXIO", ENXIO, "No such device or address");
643 #endif
644 #ifdef ENOPKG
645 add_errcode("ENOPKG", ENOPKG, "Package not installed");
646 #endif
647 #ifdef WSASY
648 add_errcode("WSASY", WSASY, "Error WSASY");
649 #endif
650 #ifdef WSAEHOSTDOWN
651 add_errcode("WSAEHOSTDOWN", WSAEHOSTDOWN, "Host is down");
652 #endif
653 #ifdef WSAENETDOWN
654 add_errcode("WSAENETDOWN", WSAENETDOWN, "Network is down");
655 #endif
656 #ifdef WSAENOTSOCK
657 add_errcode("WSAENOTSOCK", WSAENOTSOCK, "Socket operation on non-socket");
658 #endif
659 #ifdef WSAEHOSTUNREACH
660 add_errcode("WSAEHOSTUNREACH", WSAEHOSTUNREACH, "No route to host");
661 #endif
662 #ifdef WSAELOOP
663 add_errcode("WSAELOOP", WSAELOOP, "Too many symbolic links encountered");
664 #endif
665 #ifdef WSAEMFILE
666 add_errcode("WSAEMFILE", WSAEMFILE, "Too many open files");
667 #endif
668 #ifdef WSAESTALE
669 add_errcode("WSAESTALE", WSAESTALE, "Stale NFS file handle");
670 #endif
671 #ifdef WSAVERNOTSUPPORTED
672 add_errcode("WSAVERNOTSUPPORTED", WSAVERNOTSUPPORTED, "Error WSAVERNOTSUPPORTED");
673 #endif
674 #ifdef WSAENETUNREACH
675 add_errcode("WSAENETUNREACH", WSAENETUNREACH, "Network is unreachable");
676 #endif
677 #ifdef WSAEPROCLIM
678 add_errcode("WSAEPROCLIM", WSAEPROCLIM, "Error WSAEPROCLIM");
679 #endif
680 #ifdef WSAEFAULT
681 add_errcode("WSAEFAULT", WSAEFAULT, "Bad address");
682 #endif
683 #ifdef WSANOTINITIALISED
684 add_errcode("WSANOTINITIALISED", WSANOTINITIALISED, "Error WSANOTINITIALISED");
685 #endif
686 #ifdef WSAEUSERS
687 add_errcode("WSAEUSERS", WSAEUSERS, "Too many users");
688 #endif
689 #ifdef WSAMAKEASYNCREPL
690 add_errcode("WSAMAKEASYNCREPL", WSAMAKEASYNCREPL, "Error WSAMAKEASYNCREPL");
691 #endif
692 #ifdef WSAENOPROTOOPT
693 add_errcode("WSAENOPROTOOPT", WSAENOPROTOOPT, "Protocol not available");
694 #endif
695 #ifdef WSAECONNABORTED
696 add_errcode("WSAECONNABORTED", WSAECONNABORTED, "Software caused connection abort");
697 #endif
698 #ifdef WSAENAMETOOLONG
699 add_errcode("WSAENAMETOOLONG", WSAENAMETOOLONG, "File name too long");
700 #endif
701 #ifdef WSAENOTEMPTY
702 add_errcode("WSAENOTEMPTY", WSAENOTEMPTY, "Directory not empty");
703 #endif
704 #ifdef WSAESHUTDOWN
705 add_errcode("WSAESHUTDOWN", WSAESHUTDOWN, "Cannot send after transport endpoint shutdown");
706 #endif
707 #ifdef WSAEAFNOSUPPORT
708 add_errcode("WSAEAFNOSUPPORT", WSAEAFNOSUPPORT, "Address family not supported by protocol");
709 #endif
710 #ifdef WSAETOOMANYREFS
711 add_errcode("WSAETOOMANYREFS", WSAETOOMANYREFS, "Too many references: cannot splice");
712 #endif
713 #ifdef WSAEACCES
714 add_errcode("WSAEACCES", WSAEACCES, "Permission denied");
715 #endif
716 #ifdef WSATR
717 add_errcode("WSATR", WSATR, "Error WSATR");
718 #endif
719 #ifdef WSABASEERR
720 add_errcode("WSABASEERR", WSABASEERR, "Error WSABASEERR");
721 #endif
722 #ifdef WSADESCRIPTIO
723 add_errcode("WSADESCRIPTIO", WSADESCRIPTIO, "Error WSADESCRIPTIO");
724 #endif
725 #ifdef WSAEMSGSIZE
726 add_errcode("WSAEMSGSIZE", WSAEMSGSIZE, "Message too long");
727 #endif
728 #ifdef WSAEBADF
729 add_errcode("WSAEBADF", WSAEBADF, "Bad file number");
730 #endif
731 #ifdef WSAECONNRESET
732 add_errcode("WSAECONNRESET", WSAECONNRESET, "Connection reset by peer");
733 #endif
734 #ifdef WSAGETSELECTERRO
735 add_errcode("WSAGETSELECTERRO", WSAGETSELECTERRO, "Error WSAGETSELECTERRO");
736 #endif
737 #ifdef WSAETIMEDOUT
738 add_errcode("WSAETIMEDOUT", WSAETIMEDOUT, "Connection timed out");
739 #endif
740 #ifdef WSAENOBUFS
741 add_errcode("WSAENOBUFS", WSAENOBUFS, "No buffer space available");
742 #endif
743 #ifdef WSAEDISCON
744 add_errcode("WSAEDISCON", WSAEDISCON, "Error WSAEDISCON");
745 #endif
746 #ifdef WSAEINTR
747 add_errcode("WSAEINTR", WSAEINTR, "Interrupted system call");
748 #endif
749 #ifdef WSAEPROTOTYPE
750 add_errcode("WSAEPROTOTYPE", WSAEPROTOTYPE, "Protocol wrong type for socket");
751 #endif
752 #ifdef WSAHOS
753 add_errcode("WSAHOS", WSAHOS, "Error WSAHOS");
754 #endif
755 #ifdef WSAEADDRINUSE
756 add_errcode("WSAEADDRINUSE", WSAEADDRINUSE, "Address already in use");
757 #endif
758 #ifdef WSAEADDRNOTAVAIL
759 add_errcode("WSAEADDRNOTAVAIL", WSAEADDRNOTAVAIL, "Cannot assign requested address");
760 #endif
761 #ifdef WSAEALREADY
762 add_errcode("WSAEALREADY", WSAEALREADY, "Operation already in progress");
763 #endif
764 #ifdef WSAEPROTONOSUPPORT
765 add_errcode("WSAEPROTONOSUPPORT", WSAEPROTONOSUPPORT, "Protocol not supported");
766 #endif
767 #ifdef WSASYSNOTREADY
768 add_errcode("WSASYSNOTREADY", WSASYSNOTREADY, "Error WSASYSNOTREADY");
769 #endif
770 #ifdef WSAEWOULDBLOCK
771 add_errcode("WSAEWOULDBLOCK", WSAEWOULDBLOCK, "Operation would block");
772 #endif
773 #ifdef WSAEPFNOSUPPORT
774 add_errcode("WSAEPFNOSUPPORT", WSAEPFNOSUPPORT, "Protocol family not supported");
775 #endif
776 #ifdef WSAEOPNOTSUPP
777 add_errcode("WSAEOPNOTSUPP", WSAEOPNOTSUPP, "Operation not supported on transport endpoint");
778 #endif
779 #ifdef WSAEISCONN
780 add_errcode("WSAEISCONN", WSAEISCONN, "Transport endpoint is already connected");
781 #endif
782 #ifdef WSAEDQUOT
783 add_errcode("WSAEDQUOT", WSAEDQUOT, "Quota exceeded");
784 #endif
785 #ifdef WSAENOTCONN
786 add_errcode("WSAENOTCONN", WSAENOTCONN, "Transport endpoint is not connected");
787 #endif
788 #ifdef WSAEREMOTE
789 add_errcode("WSAEREMOTE", WSAEREMOTE, "Object is remote");
790 #endif
791 #ifdef WSAEINVAL
792 add_errcode("WSAEINVAL", WSAEINVAL, "Invalid argument");
793 #endif
794 #ifdef WSAEINPROGRESS
795 add_errcode("WSAEINPROGRESS", WSAEINPROGRESS, "Operation now in progress");
796 #endif
797 #ifdef WSAGETSELECTEVEN
798 add_errcode("WSAGETSELECTEVEN", WSAGETSELECTEVEN, "Error WSAGETSELECTEVEN");
799 #endif
800 #ifdef WSAESOCKTNOSUPPORT
801 add_errcode("WSAESOCKTNOSUPPORT", WSAESOCKTNOSUPPORT, "Socket type not supported");
802 #endif
803 #ifdef WSAGETASYNCERRO
804 add_errcode("WSAGETASYNCERRO", WSAGETASYNCERRO, "Error WSAGETASYNCERRO");
805 #endif
806 #ifdef WSAMAKESELECTREPL
807 add_errcode("WSAMAKESELECTREPL", WSAMAKESELECTREPL, "Error WSAMAKESELECTREPL");
808 #endif
809 #ifdef WSAGETASYNCBUFLE
810 add_errcode("WSAGETASYNCBUFLE", WSAGETASYNCBUFLE, "Error WSAGETASYNCBUFLE");
811 #endif
812 #ifdef WSAEDESTADDRREQ
813 add_errcode("WSAEDESTADDRREQ", WSAEDESTADDRREQ, "Destination address required");
814 #endif
815 #ifdef WSAECONNREFUSED
816 add_errcode("WSAECONNREFUSED", WSAECONNREFUSED, "Connection refused");
817 #endif
818 #ifdef WSAENETRESET
819 add_errcode("WSAENETRESET", WSAENETRESET, "Network dropped connection because of reset");
820 #endif
821 #ifdef WSAN
822 add_errcode("WSAN", WSAN, "Error WSAN");
823 #endif
824 #ifdef ENOMEDIUM
825 add_errcode("ENOMEDIUM", ENOMEDIUM, "No medium found");
826 #endif
827 #ifdef EMEDIUMTYPE
828 add_errcode("EMEDIUMTYPE", EMEDIUMTYPE, "Wrong medium type");
829 #endif
830 #ifdef ECANCELED
831 add_errcode("ECANCELED", ECANCELED, "Operation Canceled");
832 #endif
833 #ifdef ENOKEY
834 add_errcode("ENOKEY", ENOKEY, "Required key not available");
835 #endif
836 #ifdef EKEYEXPIRED
837 add_errcode("EKEYEXPIRED", EKEYEXPIRED, "Key has expired");
838 #endif
839 #ifdef EKEYREVOKED
840 add_errcode("EKEYREVOKED", EKEYREVOKED, "Key has been revoked");
841 #endif
842 #ifdef EKEYREJECTED
843 add_errcode("EKEYREJECTED", EKEYREJECTED, "Key was rejected by service");
844 #endif
845 #ifdef EOWNERDEAD
846 add_errcode("EOWNERDEAD", EOWNERDEAD, "Owner died");
847 #endif
848 #ifdef ENOTRECOVERABLE
849 add_errcode("ENOTRECOVERABLE", ENOTRECOVERABLE, "State not recoverable");
850 #endif
851 #ifdef ERFKILL
852 add_errcode("ERFKILL", ERFKILL, "Operation not possible due to RF-kill");
853 #endif
854
855 /* Solaris-specific errnos */
856 #ifdef ECANCELED
857 add_errcode("ECANCELED", ECANCELED, "Operation canceled");
858 #endif
859 #ifdef ENOTSUP
860 add_errcode("ENOTSUP", ENOTSUP, "Operation not supported");
861 #endif
862 #ifdef EOWNERDEAD
863 add_errcode("EOWNERDEAD", EOWNERDEAD, "Process died with the lock");
864 #endif
865 #ifdef ENOTRECOVERABLE
866 add_errcode("ENOTRECOVERABLE", ENOTRECOVERABLE, "Lock is not recoverable");
867 #endif
868 #ifdef ELOCKUNMAPPED
869 add_errcode("ELOCKUNMAPPED", ELOCKUNMAPPED, "Locked lock was unmapped");
870 #endif
871 #ifdef ENOTACTIVE
872 add_errcode("ENOTACTIVE", ENOTACTIVE, "Facility is not active");
873 #endif
874
875 /* MacOSX specific errnos */
876 #ifdef EAUTH
877 add_errcode("EAUTH", EAUTH, "Authentication error");
878 #endif
879 #ifdef EBADARCH
880 add_errcode("EBADARCH", EBADARCH, "Bad CPU type in executable");
881 #endif
882 #ifdef EBADEXEC
883 add_errcode("EBADEXEC", EBADEXEC, "Bad executable (or shared library)");
884 #endif
885 #ifdef EBADMACHO
886 add_errcode("EBADMACHO", EBADMACHO, "Malformed Mach-o file");
887 #endif
888 #ifdef EBADRPC
889 add_errcode("EBADRPC", EBADRPC, "RPC struct is bad");
890 #endif
891 #ifdef EDEVERR
892 add_errcode("EDEVERR", EDEVERR, "Device error");
893 #endif
894 #ifdef EFTYPE
895 add_errcode("EFTYPE", EFTYPE, "Inappropriate file type or format");
896 #endif
897 #ifdef ENEEDAUTH
898 add_errcode("ENEEDAUTH", ENEEDAUTH, "Need authenticator");
899 #endif
900 #ifdef ENOATTR
901 add_errcode("ENOATTR", ENOATTR, "Attribute not found");
902 #endif
903 #ifdef ENOPOLICY
904 add_errcode("ENOPOLICY", ENOPOLICY, "Policy not found");
905 #endif
906 #ifdef EPROCLIM
907 add_errcode("EPROCLIM", EPROCLIM, "Too many processes");
908 #endif
909 #ifdef EPROCUNAVAIL
910 add_errcode("EPROCUNAVAIL", EPROCUNAVAIL, "Bad procedure for program");
911 #endif
912 #ifdef EPROGMISMATCH
913 add_errcode("EPROGMISMATCH", EPROGMISMATCH, "Program version wrong");
914 #endif
915 #ifdef EPROGUNAVAIL
916 add_errcode("EPROGUNAVAIL", EPROGUNAVAIL, "RPC prog. not avail");
917 #endif
918 #ifdef EPWROFF
919 add_errcode("EPWROFF", EPWROFF, "Device power is off");
920 #endif
921 #ifdef ERPCMISMATCH
922 add_errcode("ERPCMISMATCH", ERPCMISMATCH, "RPC version wrong");
923 #endif
924 #ifdef ESHLIBVERS
925 add_errcode("ESHLIBVERS", ESHLIBVERS, "Shared library version mismatch");
926 #endif
927 #ifdef EQFULL
928 add_errcode("EQFULL", EQFULL, "Interface output queue is full");
929 #endif
930 #ifdef ENOTCAPABLE
931 // WASI extension
932 add_errcode("ENOTCAPABLE", ENOTCAPABLE, "Capabilities insufficient");
933 #endif
934
935 Py_DECREF(error_dict);
936 return 0;
937 }
938
939 static PyModuleDef_Slot errno_slots[] = {
940 {Py_mod_exec, errno_exec},
941 {0, NULL}
942 };
943
944 PyDoc_STRVAR(errno__doc__,
945 "This module makes available standard errno system symbols.\n\
946 \n\
947 The value of each symbol is the corresponding integer value,\n\
948 e.g., on most systems, errno.ENOENT equals the integer 2.\n\
949 \n\
950 The dictionary errno.errorcode maps numeric codes to symbol names,\n\
951 e.g., errno.errorcode[2] could be the string 'ENOENT'.\n\
952 \n\
953 Symbols that are not relevant to the underlying system are not defined.\n\
954 \n\
955 To map error codes to error messages, use the function os.strerror(),\n\
956 e.g. os.strerror(2) could return 'No such file or directory'.");
957
958 static struct PyModuleDef errnomodule = {
959 PyModuleDef_HEAD_INIT,
960 .m_name = "errno",
961 .m_doc = errno__doc__,
962 .m_size = 0,
963 .m_methods = errno_methods,
964 .m_slots = errno_slots,
965 };
966
967 PyMODINIT_FUNC
PyInit_errno(void)968 PyInit_errno(void)
969 {
970 return PyModuleDef_Init(&errnomodule);
971 }
972