Branch data Line data Source code
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 : 221000 : _add_errcode(PyObject *module_dict, PyObject *error_dict, const char *name_str, int code_int)
51 : : {
52 : 221000 : PyObject *name = PyUnicode_FromString(name_str);
53 [ - + ]: 221000 : if (!name) {
54 : 0 : return -1;
55 : : }
56 : :
57 : 221000 : PyObject *code = PyLong_FromLong(code_int);
58 [ - + ]: 221000 : if (!code) {
59 : 0 : Py_DECREF(name);
60 : 0 : return -1;
61 : : }
62 : :
63 : 221000 : int ret = -1;
64 : : /* insert in modules dict */
65 [ - + ]: 221000 : if (PyDict_SetItem(module_dict, name, code) < 0) {
66 : 0 : goto end;
67 : : }
68 : : /* insert in errorcode dict */
69 [ - + ]: 221000 : if (PyDict_SetItem(error_dict, code, name) < 0) {
70 : 0 : goto end;
71 : : }
72 : 221000 : ret = 0;
73 : 221000 : end:
74 : 221000 : Py_DECREF(name);
75 : 221000 : Py_DECREF(code);
76 : 221000 : return ret;
77 : : }
78 : :
79 : : static int
80 : 1625 : errno_exec(PyObject *module)
81 : : {
82 : 1625 : PyObject *module_dict = PyModule_GetDict(module);
83 : 1625 : PyObject *error_dict = PyDict_New();
84 [ + - - + ]: 1625 : if (!module_dict || !error_dict) {
85 : 0 : return -1;
86 : : }
87 [ - + ]: 1625 : if (PyDict_SetItemString(module_dict, "errorcode", error_dict) < 0) {
88 : 0 : Py_DECREF(error_dict);
89 : 0 : 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 [ - + ]: 1625 : add_errcode("ENODEV", ENODEV, "No such device");
111 : : #endif
112 : : #ifdef ENOCSI
113 [ - + ]: 1625 : add_errcode("ENOCSI", ENOCSI, "No CSI structure available");
114 : : #endif
115 : : #ifdef EHOSTUNREACH
116 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ENOMSG", ENOMSG, "No message of desired type");
124 : : #endif
125 : : #ifdef EUCLEAN
126 [ - + ]: 1625 : add_errcode("EUCLEAN", EUCLEAN, "Structure needs cleaning");
127 : : #endif
128 : : #ifdef EL2NSYNC
129 [ - + ]: 1625 : add_errcode("EL2NSYNC", EL2NSYNC, "Level 2 not synchronized");
130 : : #endif
131 : : #ifdef EL2HLT
132 [ - + ]: 1625 : add_errcode("EL2HLT", EL2HLT, "Level 2 halted");
133 : : #endif
134 : : #ifdef ENODATA
135 [ - + ]: 1625 : add_errcode("ENODATA", ENODATA, "No data available");
136 : : #endif
137 : : #ifdef ENOTBLK
138 [ - + ]: 1625 : add_errcode("ENOTBLK", ENOTBLK, "Block device required");
139 : : #endif
140 : : #ifdef ENOSYS
141 [ - + ]: 1625 : add_errcode("ENOSYS", ENOSYS, "Function not implemented");
142 : : #endif
143 : : #ifdef EPIPE
144 [ - + ]: 1625 : add_errcode("EPIPE", EPIPE, "Broken pipe");
145 : : #endif
146 : : #ifdef EINVAL
147 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("EOVERFLOW", EOVERFLOW, "Value too large for defined data type");
155 : : #endif
156 : : #ifdef EADV
157 [ - + ]: 1625 : add_errcode("EADV", EADV, "Advertise error");
158 : : #endif
159 : : #ifdef EINTR
160 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("EPROTO", EPROTO, "Protocol error");
189 : : #endif
190 : : #ifdef EREMOTE
191 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ENAVAIL", ENAVAIL, "No XENIX semaphores available");
199 : : #endif
200 : : #ifdef ECHILD
201 [ - + ]: 1625 : add_errcode("ECHILD", ECHILD, "No child processes");
202 : : #endif
203 : : #ifdef ELOOP
204 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("EXDEV", EXDEV, "Cross-device link");
212 : : #endif
213 : : #ifdef E2BIG
214 [ - + ]: 1625 : add_errcode("E2BIG", E2BIG, "Arg list too long");
215 : : #endif
216 : : #ifdef ESRCH
217 [ - + ]: 1625 : add_errcode("ESRCH", ESRCH, "No such process");
218 : : #endif
219 : : #ifdef EMSGSIZE
220 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("EBADR", EBADR, "Invalid request descriptor");
235 : : #endif
236 : : #ifdef EHOSTDOWN
237 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("EBUSY", EBUSY, "Device or resource busy");
259 : : #endif
260 : : #ifdef EWOULDBLOCK
261 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("EBADFD", EBADFD, "File descriptor in bad state");
269 : : #endif
270 : : #ifdef EDOTDOT
271 [ - + ]: 1625 : add_errcode("EDOTDOT", EDOTDOT, "RFS specific error");
272 : : #endif
273 : : #ifdef EISCONN
274 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ENOANO", ENOANO, "No anode");
282 : : #endif
283 : : #ifdef ESHUTDOWN
284 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ECHRNG", ECHRNG, "Channel number out of range");
292 : : #endif
293 : : #ifdef ELIBBAD
294 [ - + ]: 1625 : add_errcode("ELIBBAD", ELIBBAD, "Accessing a corrupted shared library");
295 : : #endif
296 : : #ifdef ENONET
297 [ - + ]: 1625 : add_errcode("ENONET", ENONET, "Machine is not on the network");
298 : : #endif
299 : : #ifdef EBADE
300 [ - + ]: 1625 : add_errcode("EBADE", EBADE, "Invalid exchange");
301 : : #endif
302 : : #ifdef EBADF
303 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("EMULTIHOP", EMULTIHOP, "Multihop attempted");
311 : : #endif
312 : : #ifdef EIO
313 [ - + ]: 1625 : add_errcode("EIO", EIO, "I/O error");
314 : : #endif
315 : : #ifdef EUNATCH
316 [ - + ]: 1625 : add_errcode("EUNATCH", EUNATCH, "Protocol driver not attached");
317 : : #endif
318 : : #ifdef EPROTOTYPE
319 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ENOSPC", ENOSPC, "No space left on device");
327 : : #endif
328 : : #ifdef ENOEXEC
329 [ - + ]: 1625 : add_errcode("ENOEXEC", ENOEXEC, "Exec format error");
330 : : #endif
331 : : #ifdef EALREADY
332 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ENOTNAM", ENOTNAM, "Not a XENIX named type file");
347 : : #endif
348 : : #ifdef EACCES
349 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ELNRNG", ELNRNG, "Link number out of range");
357 : : #endif
358 : : #ifdef EILSEQ
359 [ - + ]: 1625 : add_errcode("EILSEQ", EILSEQ, "Illegal byte sequence");
360 : : #endif
361 : : #ifdef ENOTDIR
362 [ - + ]: 1625 : add_errcode("ENOTDIR", ENOTDIR, "Not a directory");
363 : : #endif
364 : : #ifdef ENOTUNIQ
365 [ - + ]: 1625 : add_errcode("ENOTUNIQ", ENOTUNIQ, "Name not unique on network");
366 : : #endif
367 : : #ifdef EPERM
368 [ - + ]: 1625 : add_errcode("EPERM", EPERM, "Operation not permitted");
369 : : #endif
370 : : #ifdef EDOM
371 [ - + ]: 1625 : add_errcode("EDOM", EDOM, "Math argument out of domain of func");
372 : : #endif
373 : : #ifdef EXFULL
374 [ - + ]: 1625 : add_errcode("EXFULL", EXFULL, "Exchange full");
375 : : #endif
376 : : #ifdef ECONNREFUSED
377 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("EISDIR", EISDIR, "Is a directory");
385 : : #endif
386 : : #ifdef EPROTONOSUPPORT
387 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("EROFS", EROFS, "Read-only file system");
395 : : #endif
396 : : #ifdef EADDRNOTAVAIL
397 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("EIDRM", EIDRM, "Identifier removed");
405 : : #endif
406 : : #ifdef ECOMM
407 [ - + ]: 1625 : add_errcode("ECOMM", ECOMM, "Communication error on send");
408 : : #endif
409 : : #ifdef ESRMNT
410 [ - + ]: 1625 : add_errcode("ESRMNT", ESRMNT, "Srmount error");
411 : : #endif
412 : : #ifdef EREMOTEIO
413 [ - + ]: 1625 : add_errcode("EREMOTEIO", EREMOTEIO, "Remote I/O error");
414 : : #endif
415 : : #ifdef EL3RST
416 [ - + ]: 1625 : add_errcode("EL3RST", EL3RST, "Level 3 reset");
417 : : #endif
418 : : #ifdef EBADMSG
419 [ - + ]: 1625 : add_errcode("EBADMSG", EBADMSG, "Not a data message");
420 : : #endif
421 : : #ifdef ENFILE
422 [ - + ]: 1625 : add_errcode("ENFILE", ENFILE, "File table overflow");
423 : : #endif
424 : : #ifdef ELIBMAX
425 [ - + ]: 1625 : add_errcode("ELIBMAX", ELIBMAX, "Attempting to link in too many shared libraries");
426 : : #endif
427 : : #ifdef ESPIPE
428 [ - + ]: 1625 : add_errcode("ESPIPE", ESPIPE, "Illegal seek");
429 : : #endif
430 : : #ifdef ENOLINK
431 [ - + ]: 1625 : add_errcode("ENOLINK", ENOLINK, "Link has been severed");
432 : : #endif
433 : : #ifdef ENETRESET
434 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ENOENT", ENOENT, "No such file or directory");
449 : : #endif
450 : : #ifdef EEXIST
451 [ - + ]: 1625 : add_errcode("EEXIST", EEXIST, "File exists");
452 : : #endif
453 : : #ifdef EDQUOT
454 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ENOSTR", ENOSTR, "Device not a stream");
462 : : #endif
463 : : #ifdef EBADSLT
464 [ - + ]: 1625 : add_errcode("EBADSLT", EBADSLT, "Invalid slot");
465 : : #endif
466 : : #ifdef EBADRQC
467 [ - + ]: 1625 : add_errcode("EBADRQC", EBADRQC, "Invalid request code");
468 : : #endif
469 : : #ifdef ELIBACC
470 [ - + ]: 1625 : add_errcode("ELIBACC", ELIBACC, "Can not access a needed shared library");
471 : : #endif
472 : : #ifdef EFAULT
473 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("EFBIG", EFBIG, "File too large");
481 : : #endif
482 : : #ifdef EDEADLK
483 [ - + ]: 1625 : add_errcode("EDEADLK", EDEADLK, "Resource deadlock would occur");
484 : : #endif
485 : : #ifdef ENOTCONN
486 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ELIBSCN", ELIBSCN, ".lib section in a.out corrupted");
501 : : #endif
502 : : #ifdef ENOLCK
503 [ - + ]: 1625 : add_errcode("ENOLCK", ENOLCK, "No record locks available");
504 : : #endif
505 : : #ifdef EISNAM
506 [ - + ]: 1625 : add_errcode("EISNAM", EISNAM, "Is a named type file");
507 : : #endif
508 : : #ifdef ECONNABORTED
509 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ENOSR", ENOSR, "Out of streams resources");
531 : : #endif
532 : : #ifdef ENOMEM
533 [ - + ]: 1625 : add_errcode("ENOMEM", ENOMEM, "Out of memory");
534 : : #endif
535 : : #ifdef ENOTSOCK
536 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ESTRPIPE", ESTRPIPE, "Streams pipe error");
544 : : #endif
545 : : #ifdef EMLINK
546 [ - + ]: 1625 : add_errcode("EMLINK", EMLINK, "Too many links");
547 : : #endif
548 : : #ifdef ERANGE
549 [ - + ]: 1625 : add_errcode("ERANGE", ERANGE, "Math result not representable");
550 : : #endif
551 : : #ifdef ELIBEXEC
552 [ - + ]: 1625 : add_errcode("ELIBEXEC", ELIBEXEC, "Cannot exec a shared library directly");
553 : : #endif
554 : : #ifdef EL3HLT
555 [ - + ]: 1625 : add_errcode("EL3HLT", EL3HLT, "Level 3 halted");
556 : : #endif
557 : : #ifdef ECONNRESET
558 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("EREMCHG", EREMCHG, "Remote address changed");
580 : : #endif
581 : : #ifdef EAGAIN
582 [ - + ]: 1625 : add_errcode("EAGAIN", EAGAIN, "Try again");
583 : : #endif
584 : : #ifdef ENAMETOOLONG
585 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ENOTTY", ENOTTY, "Not a typewriter");
593 : : #endif
594 : : #ifdef ERESTART
595 [ - + ]: 1625 : add_errcode("ERESTART", ERESTART, "Interrupted system call should be restarted");
596 : : #endif
597 : : #ifdef ESOCKTNOSUPPORT
598 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ETIME", ETIME, "Timer expired");
606 : : #endif
607 : : #ifdef EBFONT
608 [ - + ]: 1625 : add_errcode("EBFONT", EBFONT, "Bad font file format");
609 : : #endif
610 : : #ifdef EDEADLOCK
611 [ - + ]: 1625 : add_errcode("EDEADLOCK", EDEADLOCK, "Error EDEADLOCK");
612 : : #endif
613 : : #ifdef ETOOMANYREFS
614 [ - + ]: 1625 : 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 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ETXTBSY", ETXTBSY, "Text file busy");
629 : : #endif
630 : : #ifdef EINPROGRESS
631 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ENXIO", ENXIO, "No such device or address");
639 : : #endif
640 : : #ifdef ENOPKG
641 [ - + ]: 1625 : 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 [ - + ]: 1625 : add_errcode("ENOMEDIUM", ENOMEDIUM, "No medium found");
822 : : #endif
823 : : #ifdef EMEDIUMTYPE
824 [ - + ]: 1625 : add_errcode("EMEDIUMTYPE", EMEDIUMTYPE, "Wrong medium type");
825 : : #endif
826 : : #ifdef ECANCELED
827 [ - + ]: 1625 : add_errcode("ECANCELED", ECANCELED, "Operation Canceled");
828 : : #endif
829 : : #ifdef ENOKEY
830 [ - + ]: 1625 : add_errcode("ENOKEY", ENOKEY, "Required key not available");
831 : : #endif
832 : : #ifdef EKEYEXPIRED
833 [ - + ]: 1625 : add_errcode("EKEYEXPIRED", EKEYEXPIRED, "Key has expired");
834 : : #endif
835 : : #ifdef EKEYREVOKED
836 [ - + ]: 1625 : add_errcode("EKEYREVOKED", EKEYREVOKED, "Key has been revoked");
837 : : #endif
838 : : #ifdef EKEYREJECTED
839 [ - + ]: 1625 : add_errcode("EKEYREJECTED", EKEYREJECTED, "Key was rejected by service");
840 : : #endif
841 : : #ifdef EOWNERDEAD
842 [ - + ]: 1625 : add_errcode("EOWNERDEAD", EOWNERDEAD, "Owner died");
843 : : #endif
844 : : #ifdef ENOTRECOVERABLE
845 [ - + ]: 1625 : add_errcode("ENOTRECOVERABLE", ENOTRECOVERABLE, "State not recoverable");
846 : : #endif
847 : : #ifdef ERFKILL
848 [ - + ]: 1625 : add_errcode("ERFKILL", ERFKILL, "Operation not possible due to RF-kill");
849 : : #endif
850 : :
851 : : /* Solaris-specific errnos */
852 : : #ifdef ECANCELED
853 [ - + ]: 1625 : add_errcode("ECANCELED", ECANCELED, "Operation canceled");
854 : : #endif
855 : : #ifdef ENOTSUP
856 [ - + ]: 1625 : add_errcode("ENOTSUP", ENOTSUP, "Operation not supported");
857 : : #endif
858 : : #ifdef EOWNERDEAD
859 [ - + ]: 1625 : add_errcode("EOWNERDEAD", EOWNERDEAD, "Process died with the lock");
860 : : #endif
861 : : #ifdef ENOTRECOVERABLE
862 [ - + ]: 1625 : 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 : 1625 : Py_DECREF(error_dict);
928 : 1625 : 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 : 1625 : PyInit_errno(void)
961 : : {
962 : 1625 : return PyModuleDef_Init(&errnomodule);
963 : : }
|