Coverage Report

Created: 2026-03-08 06:40

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/cpython/Modules/errnomodule.c
Line
Count
Source
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
4.65k
{
61
4.65k
    PyObject *name = PyUnicode_FromString(name_str);
62
4.65k
    if (!name) {
63
0
        return -1;
64
0
    }
65
66
4.65k
    PyObject *code = PyLong_FromLong(code_int);
67
4.65k
    if (!code) {
68
0
        Py_DECREF(name);
69
0
        return -1;
70
0
    }
71
72
4.65k
    int ret = -1;
73
    /* insert in modules dict */
74
4.65k
    if (PyDict_SetItem(module_dict, name, code) < 0) {
75
0
        goto end;
76
0
    }
77
    /* insert in errorcode dict */
78
4.65k
    if (PyDict_SetItem(error_dict, code, name) < 0) {
79
0
        goto end;
80
0
    }
81
4.65k
    ret = 0;
82
4.65k
end:
83
4.65k
    Py_DECREF(name);
84
4.65k
    Py_DECREF(code);
85
4.65k
    return ret;
86
4.65k
}
87
88
static int
89
errno_exec(PyObject *module)
90
34
{
91
34
    PyObject *module_dict = PyModule_GetDict(module);  // Borrowed ref.
92
34
    if (module_dict == NULL) {
93
0
        return -1;
94
0
    }
95
34
    PyObject *error_dict = PyDict_New();
96
34
    if (error_dict == NULL) {
97
0
        return -1;
98
0
    }
99
34
    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
34
#define add_errcode(name, code, comment)                               \
106
4.65k
    do {                                                               \
107
4.65k
        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
108
0
            Py_DECREF(error_dict);                                     \
109
0
            return -1;                                                 \
110
0
        }                                                              \
111
4.65k
    } 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
34
#ifdef ENODEV
122
34
    add_errcode("ENODEV", ENODEV, "No such device");
123
34
#endif
124
34
#ifdef ENOCSI
125
34
    add_errcode("ENOCSI", ENOCSI, "No CSI structure available");
126
34
#endif
127
34
#ifdef EHOSTUNREACH
128
34
    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
34
#ifdef ENOMSG
135
34
    add_errcode("ENOMSG", ENOMSG, "No message of desired type");
136
34
#endif
137
34
#ifdef EUCLEAN
138
34
    add_errcode("EUCLEAN", EUCLEAN, "Structure needs cleaning");
139
34
#endif
140
34
#ifdef EL2NSYNC
141
34
    add_errcode("EL2NSYNC", EL2NSYNC, "Level 2 not synchronized");
142
34
#endif
143
34
#ifdef EL2HLT
144
34
    add_errcode("EL2HLT", EL2HLT, "Level 2 halted");
145
34
#endif
146
34
#ifdef ENODATA
147
34
    add_errcode("ENODATA", ENODATA, "No data available");
148
34
#endif
149
34
#ifdef ENOTBLK
150
34
    add_errcode("ENOTBLK", ENOTBLK, "Block device required");
151
34
#endif
152
34
#ifdef ENOSYS
153
34
    add_errcode("ENOSYS", ENOSYS, "Function not implemented");
154
34
#endif
155
34
#ifdef EPIPE
156
34
    add_errcode("EPIPE", EPIPE, "Broken pipe");
157
34
#endif
158
34
#ifdef EINVAL
159
34
    add_errcode("EINVAL", EINVAL, "Invalid argument");
160
#else
161
#ifdef WSAEINVAL
162
    add_errcode("EINVAL", WSAEINVAL, "Invalid argument");
163
#endif
164
#endif
165
34
#ifdef EOVERFLOW
166
34
    add_errcode("EOVERFLOW", EOVERFLOW, "Value too large for defined data type");
167
34
#endif
168
34
#ifdef EADV
169
34
    add_errcode("EADV", EADV, "Advertise error");
170
34
#endif
171
34
#ifdef EINTR
172
34
    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
34
#ifdef EUSERS
179
34
    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
34
#ifdef ENOTEMPTY
186
34
    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
34
#ifdef ENOBUFS
193
34
    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
34
#ifdef EPROTO
200
34
    add_errcode("EPROTO", EPROTO, "Protocol error");
201
34
#endif
202
34
#ifdef EREMOTE
203
34
    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
34
#ifdef ENAVAIL
210
34
    add_errcode("ENAVAIL", ENAVAIL, "No XENIX semaphores available");
211
34
#endif
212
34
#ifdef ECHILD
213
34
    add_errcode("ECHILD", ECHILD, "No child processes");
214
34
#endif
215
34
#ifdef ELOOP
216
34
    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
34
#ifdef EXDEV
223
34
    add_errcode("EXDEV", EXDEV, "Cross-device link");
224
34
#endif
225
34
#ifdef E2BIG
226
34
    add_errcode("E2BIG", E2BIG, "Arg list too long");
227
34
#endif
228
34
#ifdef ESRCH
229
34
    add_errcode("ESRCH", ESRCH, "No such process");
230
34
#endif
231
34
#ifdef EMSGSIZE
232
34
    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
34
#ifdef EAFNOSUPPORT
239
34
    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
34
#ifdef EBADR
246
34
    add_errcode("EBADR", EBADR, "Invalid request descriptor");
247
34
#endif
248
34
#ifdef EHOSTDOWN
249
34
    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
34
#ifdef EPFNOSUPPORT
256
34
    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
34
#ifdef ENOPROTOOPT
263
34
    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
34
#ifdef EBUSY
270
34
    add_errcode("EBUSY", EBUSY, "Device or resource busy");
271
34
#endif
272
34
#ifdef EWOULDBLOCK
273
34
    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
34
#ifdef EBADFD
280
34
    add_errcode("EBADFD", EBADFD, "File descriptor in bad state");
281
34
#endif
282
34
#ifdef EDOTDOT
283
34
    add_errcode("EDOTDOT", EDOTDOT, "RFS specific error");
284
34
#endif
285
34
#ifdef EISCONN
286
34
    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
34
#ifdef ENOANO
293
34
    add_errcode("ENOANO", ENOANO, "No anode");
294
34
#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
34
#ifdef ESHUTDOWN
300
34
    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
34
#ifdef ECHRNG
307
34
    add_errcode("ECHRNG", ECHRNG, "Channel number out of range");
308
34
#endif
309
34
#ifdef ELIBBAD
310
34
    add_errcode("ELIBBAD", ELIBBAD, "Accessing a corrupted shared library");
311
34
#endif
312
34
#ifdef ENONET
313
34
    add_errcode("ENONET", ENONET, "Machine is not on the network");
314
34
#endif
315
34
#ifdef EBADE
316
34
    add_errcode("EBADE", EBADE, "Invalid exchange");
317
34
#endif
318
34
#ifdef EBADF
319
34
    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
34
#ifdef EMULTIHOP
326
34
    add_errcode("EMULTIHOP", EMULTIHOP, "Multihop attempted");
327
34
#endif
328
34
#ifdef EIO
329
34
    add_errcode("EIO", EIO, "I/O error");
330
34
#endif
331
34
#ifdef EUNATCH
332
34
    add_errcode("EUNATCH", EUNATCH, "Protocol driver not attached");
333
34
#endif
334
34
#ifdef EPROTOTYPE
335
34
    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
34
#ifdef ENOSPC
342
34
    add_errcode("ENOSPC", ENOSPC, "No space left on device");
343
34
#endif
344
34
#ifdef ENOEXEC
345
34
    add_errcode("ENOEXEC", ENOEXEC, "Exec format error");
346
34
#endif
347
34
#ifdef EALREADY
348
34
    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
34
#ifdef ENETDOWN
355
34
    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
34
#ifdef ENOTNAM
362
34
    add_errcode("ENOTNAM", ENOTNAM, "Not a XENIX named type file");
363
34
#endif
364
34
#ifdef EACCES
365
34
    add_errcode("EACCES", EACCES, "Permission denied");
366
#else
367
#ifdef WSAEACCES
368
    add_errcode("EACCES", WSAEACCES, "Permission denied");
369
#endif
370
#endif
371
34
#ifdef ELNRNG
372
34
    add_errcode("ELNRNG", ELNRNG, "Link number out of range");
373
34
#endif
374
34
#ifdef EILSEQ
375
34
    add_errcode("EILSEQ", EILSEQ, "Illegal byte sequence");
376
34
#endif
377
34
#ifdef ENOTDIR
378
34
    add_errcode("ENOTDIR", ENOTDIR, "Not a directory");
379
34
#endif
380
34
#ifdef ENOTUNIQ
381
34
    add_errcode("ENOTUNIQ", ENOTUNIQ, "Name not unique on network");
382
34
#endif
383
34
#ifdef EPERM
384
34
    add_errcode("EPERM", EPERM, "Operation not permitted");
385
34
#endif
386
34
#ifdef EDOM
387
34
    add_errcode("EDOM", EDOM, "Math argument out of domain of func");
388
34
#endif
389
34
#ifdef EXFULL
390
34
    add_errcode("EXFULL", EXFULL, "Exchange full");
391
34
#endif
392
34
#ifdef ECONNREFUSED
393
34
    add_errcode("ECONNREFUSED", ECONNREFUSED, "Connection refused");
394
#else
395
#ifdef WSAECONNREFUSED
396
    add_errcode("ECONNREFUSED", WSAECONNREFUSED, "Connection refused");
397
#endif
398
#endif
399
34
#ifdef EISDIR
400
34
    add_errcode("EISDIR", EISDIR, "Is a directory");
401
34
#endif
402
34
#ifdef EPROTONOSUPPORT
403
34
    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
34
#ifdef EROFS
410
34
    add_errcode("EROFS", EROFS, "Read-only file system");
411
34
#endif
412
34
#ifdef EADDRNOTAVAIL
413
34
    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
34
#ifdef EIDRM
420
34
    add_errcode("EIDRM", EIDRM, "Identifier removed");
421
34
#endif
422
34
#ifdef ECOMM
423
34
    add_errcode("ECOMM", ECOMM, "Communication error on send");
424
34
#endif
425
34
#ifdef ESRMNT
426
34
    add_errcode("ESRMNT", ESRMNT, "Srmount error");
427
34
#endif
428
34
#ifdef EREMOTEIO
429
34
    add_errcode("EREMOTEIO", EREMOTEIO, "Remote I/O error");
430
34
#endif
431
34
#ifdef EL3RST
432
34
    add_errcode("EL3RST", EL3RST, "Level 3 reset");
433
34
#endif
434
34
#ifdef EBADMSG
435
34
    add_errcode("EBADMSG", EBADMSG, "Not a data message");
436
34
#endif
437
34
#ifdef ENFILE
438
34
    add_errcode("ENFILE", ENFILE, "File table overflow");
439
34
#endif
440
34
#ifdef ELIBMAX
441
34
    add_errcode("ELIBMAX", ELIBMAX, "Attempting to link in too many shared libraries");
442
34
#endif
443
34
#ifdef ESPIPE
444
34
    add_errcode("ESPIPE", ESPIPE, "Illegal seek");
445
34
#endif
446
34
#ifdef ENOLINK
447
34
    add_errcode("ENOLINK", ENOLINK, "Link has been severed");
448
34
#endif
449
34
#ifdef ENETRESET
450
34
    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
34
#ifdef ETIMEDOUT
457
34
    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
34
#ifdef ENOENT
464
34
    add_errcode("ENOENT", ENOENT, "No such file or directory");
465
34
#endif
466
34
#ifdef EEXIST
467
34
    add_errcode("EEXIST", EEXIST, "File exists");
468
34
#endif
469
34
#ifdef EDQUOT
470
34
    add_errcode("EDQUOT", EDQUOT, "Quota exceeded");
471
#else
472
#ifdef WSAEDQUOT
473
    add_errcode("EDQUOT", WSAEDQUOT, "Quota exceeded");
474
#endif
475
#endif
476
34
#ifdef ENOSTR
477
34
    add_errcode("ENOSTR", ENOSTR, "Device not a stream");
478
34
#endif
479
34
#ifdef EBADSLT
480
34
    add_errcode("EBADSLT", EBADSLT, "Invalid slot");
481
34
#endif
482
34
#ifdef EBADRQC
483
34
    add_errcode("EBADRQC", EBADRQC, "Invalid request code");
484
34
#endif
485
34
#ifdef ELIBACC
486
34
    add_errcode("ELIBACC", ELIBACC, "Can not access a needed shared library");
487
34
#endif
488
34
#ifdef EFAULT
489
34
    add_errcode("EFAULT", EFAULT, "Bad address");
490
#else
491
#ifdef WSAEFAULT
492
    add_errcode("EFAULT", WSAEFAULT, "Bad address");
493
#endif
494
#endif
495
34
#ifdef EFBIG
496
34
    add_errcode("EFBIG", EFBIG, "File too large");
497
34
#endif
498
34
#ifdef EDEADLK
499
34
    add_errcode("EDEADLK", EDEADLK, "Resource deadlock would occur");
500
34
#endif
501
34
#ifdef ENOTCONN
502
34
    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
34
#ifdef EDESTADDRREQ
509
34
    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
34
#ifdef ELIBSCN
516
34
    add_errcode("ELIBSCN", ELIBSCN, ".lib section in a.out corrupted");
517
34
#endif
518
34
#ifdef ENOLCK
519
34
    add_errcode("ENOLCK", ENOLCK, "No record locks available");
520
34
#endif
521
34
#ifdef EISNAM
522
34
    add_errcode("EISNAM", EISNAM, "Is a named type file");
523
34
#endif
524
34
#ifdef ECONNABORTED
525
34
    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
34
#ifdef ENETUNREACH
532
34
    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
34
#ifdef ESTALE
539
34
    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
34
#ifdef ENOSR
546
34
    add_errcode("ENOSR", ENOSR, "Out of streams resources");
547
34
#endif
548
34
#ifdef ENOMEM
549
34
    add_errcode("ENOMEM", ENOMEM, "Out of memory");
550
34
#endif
551
34
#ifdef ENOTSOCK
552
34
    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
34
#ifdef ESTRPIPE
559
34
    add_errcode("ESTRPIPE", ESTRPIPE, "Streams pipe error");
560
34
#endif
561
34
#ifdef EMLINK
562
34
    add_errcode("EMLINK", EMLINK, "Too many links");
563
34
#endif
564
34
#ifdef ERANGE
565
34
    add_errcode("ERANGE", ERANGE, "Math result not representable");
566
34
#endif
567
34
#ifdef ELIBEXEC
568
34
    add_errcode("ELIBEXEC", ELIBEXEC, "Cannot exec a shared library directly");
569
34
#endif
570
34
#ifdef EL3HLT
571
34
    add_errcode("EL3HLT", EL3HLT, "Level 3 halted");
572
34
#endif
573
34
#ifdef ECONNRESET
574
34
    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
34
#ifdef EADDRINUSE
581
34
    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
34
#ifdef EOPNOTSUPP
588
34
    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
34
#ifdef EREMCHG
595
34
    add_errcode("EREMCHG", EREMCHG, "Remote address changed");
596
34
#endif
597
34
#ifdef EAGAIN
598
34
    add_errcode("EAGAIN", EAGAIN, "Try again");
599
34
#endif
600
34
#ifdef ENAMETOOLONG
601
34
    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
34
#ifdef ENOTTY
608
34
    add_errcode("ENOTTY", ENOTTY, "Not a typewriter");
609
34
#endif
610
34
#ifdef ERESTART
611
34
    add_errcode("ERESTART", ERESTART, "Interrupted system call should be restarted");
612
34
#endif
613
34
#ifdef ESOCKTNOSUPPORT
614
34
    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
34
#ifdef ETIME
621
34
    add_errcode("ETIME", ETIME, "Timer expired");
622
34
#endif
623
34
#ifdef EBFONT
624
34
    add_errcode("EBFONT", EBFONT, "Bad font file format");
625
34
#endif
626
34
#ifdef EDEADLOCK
627
34
    add_errcode("EDEADLOCK", EDEADLOCK, "Error EDEADLOCK");
628
34
#endif
629
34
#ifdef ETOOMANYREFS
630
34
    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
34
#ifdef EMFILE
637
34
    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
34
#ifdef ETXTBSY
644
34
    add_errcode("ETXTBSY", ETXTBSY, "Text file busy");
645
34
#endif
646
34
#ifdef EINPROGRESS
647
34
    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
34
#ifdef ENXIO
654
34
    add_errcode("ENXIO", ENXIO, "No such device or address");
655
34
#endif
656
34
#ifdef ENOPKG
657
34
    add_errcode("ENOPKG", ENOPKG, "Package not installed");
658
34
#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
34
#ifdef ENOMEDIUM
837
34
    add_errcode("ENOMEDIUM", ENOMEDIUM, "No medium found");
838
34
#endif
839
34
#ifdef EMEDIUMTYPE
840
34
    add_errcode("EMEDIUMTYPE", EMEDIUMTYPE, "Wrong medium type");
841
34
#endif
842
34
#ifdef ECANCELED
843
34
    add_errcode("ECANCELED", ECANCELED, "Operation Canceled");
844
34
#endif
845
34
#ifdef ENOKEY
846
34
    add_errcode("ENOKEY", ENOKEY, "Required key not available");
847
34
#endif
848
34
#ifdef EHWPOISON
849
34
    add_errcode("EHWPOISON", EHWPOISON, "Memory page has hardware error");
850
34
#endif
851
34
#ifdef EKEYEXPIRED
852
34
    add_errcode("EKEYEXPIRED", EKEYEXPIRED, "Key has expired");
853
34
#endif
854
34
#ifdef EKEYREVOKED
855
34
    add_errcode("EKEYREVOKED", EKEYREVOKED, "Key has been revoked");
856
34
#endif
857
34
#ifdef EKEYREJECTED
858
34
    add_errcode("EKEYREJECTED", EKEYREJECTED, "Key was rejected by service");
859
34
#endif
860
34
#ifdef EOWNERDEAD
861
34
    add_errcode("EOWNERDEAD", EOWNERDEAD, "Owner died");
862
34
#endif
863
34
#ifdef ENOTRECOVERABLE
864
34
    add_errcode("ENOTRECOVERABLE", ENOTRECOVERABLE, "State not recoverable");
865
34
#endif
866
34
#ifdef ERFKILL
867
34
    add_errcode("ERFKILL", ERFKILL, "Operation not possible due to RF-kill");
868
34
#endif
869
870
    /* Solaris-specific errnos */
871
34
#ifdef ECANCELED
872
34
    add_errcode("ECANCELED", ECANCELED, "Operation canceled");
873
34
#endif
874
34
#ifdef ENOTSUP
875
34
    add_errcode("ENOTSUP", ENOTSUP, "Operation not supported");
876
34
#endif
877
34
#ifdef EOWNERDEAD
878
34
    add_errcode("EOWNERDEAD", EOWNERDEAD, "Process died with the lock");
879
34
#endif
880
34
#ifdef ENOTRECOVERABLE
881
34
    add_errcode("ENOTRECOVERABLE", ENOTRECOVERABLE, "Lock is not recoverable");
882
34
#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
34
    Py_DECREF(error_dict);
951
34
    return 0;
952
34
}
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
34
{
987
34
    return PyModuleDef_Init(&errnomodule);
988
34
}