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