/home/mdboom/Work/builds/cpython/Modules/errnomodule.c
Line | Count | Source (jump to first uncovered line) |
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 |
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) { Branch (53:9): [True: 0, False: 1.36k]
|
54 | return -1; |
55 | } |
56 | |
57 | PyObject *code = PyLong_FromLong(code_int); |
58 | if (!code) { Branch (58:9): [True: 0, False: 1.36k]
|
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) { Branch (65:9): [True: 0, False: 1.36k]
|
66 | goto end; |
67 | } |
68 | /* insert in errorcode dict */ |
69 | if (PyDict_SetItem(error_dict, code, name) < 0) { Branch (69:9): [True: 0, False: 1.36k]
|
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 |
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) { Branch (84:9): [True: 0, False: 10]
Branch (84:25): [True: 0, False: 10]
|
85 | return -1; |
86 | } |
87 | if (PyDict_SetItemString(module_dict, "errorcode", error_dict) < 0) { Branch (87:9): [True: 0, False: 10]
|
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 | #ifdef EQFULL |
924 | add_errcode("EQFULL", EQFULL, "Interface output queue is full"); |
925 | #endif |
926 | |
927 | Py_DECREF(error_dict); |
928 | return 0; |
929 | } |
930 | |
931 | static PyModuleDef_Slot errno_slots[] = { |
932 | {Py_mod_exec, errno_exec}, |
933 | {0, NULL} |
934 | }; |
935 | |
936 | PyDoc_STRVAR(errno__doc__, |
937 | "This module makes available standard errno system symbols.\n\ |
938 | \n\ |
939 | The value of each symbol is the corresponding integer value,\n\ |
940 | e.g., on most systems, errno.ENOENT equals the integer 2.\n\ |
941 | \n\ |
942 | The dictionary errno.errorcode maps numeric codes to symbol names,\n\ |
943 | e.g., errno.errorcode[2] could be the string 'ENOENT'.\n\ |
944 | \n\ |
945 | Symbols that are not relevant to the underlying system are not defined.\n\ |
946 | \n\ |
947 | To map error codes to error messages, use the function os.strerror(),\n\ |
948 | e.g. os.strerror(2) could return 'No such file or directory'."); |
949 | |
950 | static struct PyModuleDef errnomodule = { |
951 | PyModuleDef_HEAD_INIT, |
952 | .m_name = "errno", |
953 | .m_doc = errno__doc__, |
954 | .m_size = 0, |
955 | .m_methods = errno_methods, |
956 | .m_slots = errno_slots, |
957 | }; |
958 | |
959 | PyMODINIT_FUNC |
960 | PyInit_errno(void) |
961 | { |
962 | return PyModuleDef_Init(&errnomodule); |
963 | } |