Coverage Report

Created: 2022-07-08 09:39

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