Lely core libraries 1.9.2
errnum.c
Go to the documentation of this file.
1
24#include "util.h"
25#define LELY_UTIL_ERRNUM_INLINE extern inline
26#include <lely/util/errnum.h>
27#include <lely/util/util.h>
28
29#include <string.h>
30
31#if _WIN32
32
33#include <windows.h>
34
35#ifndef ERRSTR_SIZE
36#define ERRSTR_SIZE 256
37#endif
38static _Thread_local char errstr[ERRSTR_SIZE];
39
40#endif // _WIN32
41
42int
44{
45#if _WIN32
46 return errnum2c(errno2num(errnum));
47#else
48 return errnum;
49#endif
50}
51
54{
55 switch (errnum) {
56#ifdef E2BIG
57 case E2BIG: return ERRNUM_2BIG;
58#endif
59#ifdef EACCES
60 case EACCES: return ERRNUM_ACCES;
61#endif
62#ifdef EADDRINUSE
63 case EADDRINUSE: return ERRNUM_ADDRINUSE;
64#endif
65#ifdef EADDRNOTAVAIL
66 case EADDRNOTAVAIL: return ERRNUM_ADDRNOTAVAIL;
67#endif
68#ifdef EAFNOSUPPORT
69 case EAFNOSUPPORT: return ERRNUM_AFNOSUPPORT;
70#endif
71#ifdef EAGAIN
72 case EAGAIN: return ERRNUM_AGAIN;
73#endif
74#ifdef EALREADY
75 case EALREADY: return ERRNUM_ALREADY;
76#endif
77#ifdef EBADF
78 case EBADF: return ERRNUM_BADF;
79#endif
80#ifdef EBADMSG
81 case EBADMSG: return ERRNUM_BADMSG;
82#endif
83#ifdef EBUSY
84 case EBUSY: return ERRNUM_BUSY;
85#endif
86#ifdef ECANCELED
87 case ECANCELED: return ERRNUM_CANCELED;
88#endif
89#ifdef ECHILD
90 case ECHILD: return ERRNUM_CHILD;
91#endif
92#ifdef ECONNABORTED
93 case ECONNABORTED: return ERRNUM_CONNABORTED;
94#endif
95#ifdef ECONNREFUSED
96 case ECONNREFUSED: return ERRNUM_CONNREFUSED;
97#endif
98#ifdef ECONNRESET
99 case ECONNRESET: return ERRNUM_CONNRESET;
100#endif
101#ifdef EDEADLK
102 case EDEADLK: return ERRNUM_DEADLK;
103#endif
104#ifdef EDESTADDRREQ
105 case EDESTADDRREQ: return ERRNUM_DESTADDRREQ;
106#endif
107 // clang-format off
108 case EDOM: return ERRNUM_DOM;
109 // clang-format on
110// #ifdef EDQUOT
111// case EDQUOT: return ERRNUM_DQUOT;
112// #endif
113#ifdef EEXIST
114 case EEXIST: return ERRNUM_EXIST;
115#endif
116#ifdef EFAULT
117 case EFAULT: return ERRNUM_FAULT;
118#endif
119#ifdef EFBIG
120 case EFBIG: return ERRNUM_FBIG;
121#endif
122#ifdef EHOSTUNREACH
123 case EHOSTUNREACH: return ERRNUM_HOSTUNREACH;
124#endif
125#ifdef EIDRM
126 case EIDRM: return ERRNUM_IDRM;
127#endif
128 case EILSEQ: return ERRNUM_ILSEQ;
129#ifdef EINPROGRESS
130 case EINPROGRESS: return ERRNUM_INPROGRESS;
131#endif
132#ifdef EINTR
133 case EINTR: return ERRNUM_INTR;
134#endif
135#ifdef EINVAL
136 case EINVAL: return ERRNUM_INVAL;
137#endif
138#ifdef EIO
139 case EIO: return ERRNUM_IO;
140#endif
141#ifdef EISCONN
142 case EISCONN: return ERRNUM_ISCONN;
143#endif
144#ifdef EISDIR
145 case EISDIR: return ERRNUM_ISDIR;
146#endif
147#ifdef ELOOP
148 case ELOOP: return ERRNUM_LOOP;
149#endif
150#ifdef EMFILE
151 case EMFILE: return ERRNUM_MFILE;
152#endif
153#ifdef EMLINK
154 case EMLINK: return ERRNUM_MLINK;
155#endif
156#ifdef EMSGSIZE
157 case EMSGSIZE: return ERRNUM_MSGSIZE;
158#endif
159// #ifdef EMULTIHOP
160// case EMULTIHOP: return ERRNUM_MULTIHOP;
161// #endif
162#ifdef ENAMETOOLONG
163 case ENAMETOOLONG: return ERRNUM_NAMETOOLONG;
164#endif
165#ifdef ENETDOWN
166 case ENETDOWN: return ERRNUM_NETDOWN;
167#endif
168#ifdef ENETRESET
169 case ENETRESET: return ERRNUM_NETRESET;
170#endif
171#ifdef ENETUNREACH
172 case ENETUNREACH: return ERRNUM_NETUNREACH;
173#endif
174#ifdef ENFILE
175 case ENFILE: return ERRNUM_NFILE;
176#endif
177#ifdef ENOBUFS
178 case ENOBUFS: return ERRNUM_NOBUFS;
179#endif
180#ifdef ENODATA
181 case ENODATA: return ERRNUM_NODATA;
182#endif
183#ifdef ENODEV
184 case ENODEV: return ERRNUM_NODEV;
185#endif
186#ifdef ENOENT
187 case ENOENT: return ERRNUM_NOENT;
188#endif
189#ifdef ENOEXEC
190 case ENOEXEC: return ERRNUM_NOEXEC;
191#endif
192#ifdef ENOLCK
193 case ENOLCK: return ERRNUM_NOLCK;
194#endif
195// #ifdef ENOLINK
196// case ENOLINK: return ERRNUM_NOLINK;
197// #endif
198#ifdef ENOMEM
199 case ENOMEM: return ERRNUM_NOMEM;
200#endif
201#ifdef ENOMSG
202 case ENOMSG: return ERRNUM_NOMSG;
203#endif
204#ifdef ENOPROTOOPT
205 case ENOPROTOOPT: return ERRNUM_NOPROTOOPT;
206#endif
207#ifdef ENOSPC
208 case ENOSPC: return ERRNUM_NOSPC;
209#endif
210#ifdef ENOSR
211 case ENOSR: return ERRNUM_NOSR;
212#endif
213#ifdef ENOSTR
214 case ENOSTR: return ERRNUM_NOSTR;
215#endif
216#ifdef ENOSYS
217 case ENOSYS: return ERRNUM_NOSYS;
218#endif
219#ifdef ENOTCONN
220 case ENOTCONN: return ERRNUM_NOTCONN;
221#endif
222#ifdef ENOTDIR
223 case ENOTDIR: return ERRNUM_NOTDIR;
224#endif
225#ifdef ENOTEMPTY
226 case ENOTEMPTY: return ERRNUM_NOTEMPTY;
227#endif
228#ifdef ENOTRECOVERABLE
229 case ENOTRECOVERABLE: return ERRNUM_NOTRECOVERABLE;
230#endif
231#ifdef ENOTSOCK
232 case ENOTSOCK: return ERRNUM_NOTSOCK;
233#endif
234#ifdef ENOTSUP
235 case ENOTSUP: return ERRNUM_NOTSUP;
236#endif
237#ifdef ENOTTY
238 case ENOTTY: return ERRNUM_NOTTY;
239#endif
240#ifdef ENXIO
241 case ENXIO: return ERRNUM_NXIO;
242#endif
243#if defined(EOPNOTSUPP) && EOPNOTSUPP != ENOTSUP
244 case EOPNOTSUPP: return ERRNUM_OPNOTSUPP;
245#endif
246#ifdef EOVERFLOW
247 case EOVERFLOW: return ERRNUM_OVERFLOW;
248#endif
249#ifdef EOWNERDEAD
250 case EOWNERDEAD: return ERRNUM_OWNERDEAD;
251#endif
252#ifdef EPERM
253 case EPERM: return ERRNUM_PERM;
254#endif
255#ifdef EPIPE
256 case EPIPE: return ERRNUM_PIPE;
257#endif
258#ifdef EPROTO
259 case EPROTO: return ERRNUM_PROTO;
260#endif
261#ifdef EPROTONOSUPPORT
262 case EPROTONOSUPPORT: return ERRNUM_PROTONOSUPPORT;
263#endif
264#ifdef EPROTOTYPE
265 case EPROTOTYPE: return ERRNUM_PROTOTYPE;
266#endif
267 case ERANGE: return ERRNUM_RANGE;
268#ifdef EROFS
269 case EROFS: return ERRNUM_ROFS;
270#endif
271#ifdef ESPIPE
272 case ESPIPE: return ERRNUM_SPIPE;
273#endif
274#ifdef ESRCH
275 case ESRCH: return ERRNUM_SRCH;
276#endif
277// #ifdef ESTALE
278// case ESTALE: return ERRNUM_STALE;
279// #endif
280#ifdef ETIME
281 case ETIME: return ERRNUM_TIME;
282#endif
283#ifdef ETIMEDOUT
284 case ETIMEDOUT: return ERRNUM_TIMEDOUT;
285#endif
286#ifdef ETXTBSY
287 case ETXTBSY: return ERRNUM_TXTBSY;
288#endif
289#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
290 case EWOULDBLOCK: return ERRNUM_WOULDBLOCK;
291#endif
292#ifdef EXDEV
293 case EXDEV: return ERRNUM_XDEV;
294#endif
295 default: return 0;
296 }
297}
298
299int
300errc2no(int errc)
301{
302#if _WIN32
303 return errnum2no(errc2num(errc));
304#else
305 return errc > 0 ? errc : 0;
306#endif
307}
308
310errc2num(int errc)
311{
312#if _WIN32
313 switch (errc) {
314 case ERROR_ACCESS_DENIED: return ERRNUM_ACCES;
315 case ERROR_ADDRESS_ALREADY_ASSOCIATED: return ERRNUM_ADDRINUSE;
316 case ERROR_ACTIVE_CONNECTIONS: return ERRNUM_AGAIN;
317 case ERROR_ALREADY_EXISTS: return ERRNUM_EXIST;
318 case ERROR_ARENA_TRASHED: return ERRNUM_NOMEM;
319 case ERROR_ARITHMETIC_OVERFLOW: return ERRNUM_RANGE;
320 case ERROR_BAD_DEVICE: return ERRNUM_NODEV;
321 case ERROR_BAD_ENVIRONMENT: return ERRNUM_2BIG;
322 case ERROR_BAD_EXE_FORMAT: return ERRNUM_NOEXEC;
323 case ERROR_BAD_FORMAT: return ERRNUM_NOEXEC;
324 case ERROR_BAD_NET_NAME: return ERRNUM_NOENT;
325 case ERROR_BAD_NETPATH: return ERRNUM_NOENT;
326 case ERROR_BAD_NET_RESP: return ERRNUM_NOSYS;
327 case ERROR_BAD_PATHNAME: return ERRNUM_NOENT;
328 case ERROR_BAD_PIPE: return ERRNUM_INVAL;
329 // case ERROR_BAD_PIPE: return ERRNUM_PIPE; // libuv
330 case ERROR_BAD_UNIT: return ERRNUM_NODEV;
331 case ERROR_BAD_USERNAME: return ERRNUM_INVAL;
332 case ERROR_BEGINNING_OF_MEDIA: return ERRNUM_IO;
333 case ERROR_BROKEN_PIPE: return ERRNUM_PIPE;
334 // case ERROR_BUFFER_OVERFLOW: return ERRNUM_FAULT; / libuv
335 case ERROR_BUFFER_OVERFLOW: return ERRNUM_NAMETOOLONG;
336 case ERROR_BUS_RESET: return ERRNUM_IO;
337 case ERROR_BUSY: return ERRNUM_BUSY;
338 case ERROR_BUSY_DRIVE: return ERRNUM_BUSY;
339 case ERROR_CALL_NOT_IMPLEMENTED: return ERRNUM_NOSYS;
340 case ERROR_CANCELLED: return ERRNUM_INTR;
341 case ERROR_CANNOT_MAKE: return ERRNUM_ACCES;
342 // case ERROR_CANNOT_MAKE: return ERRNUM_NOSPC; // libuv
343 // case ERROR_CANNOT_MAKE: return ERRNUM_PERM; // Cygwin
344 case ERROR_CANTOPEN: return ERRNUM_IO;
345 case ERROR_CANTREAD: return ERRNUM_IO;
346 case ERROR_CANTWRITE: return ERRNUM_IO;
347 case ERROR_CANT_RESOLVE_FILENAME: return ERRNUM_LOOP;
348 // case ERROR_CHILD_NOT_COMPLETE: return ERRNUM_BUSY; // Cygwin
349 case ERROR_CHILD_NOT_COMPLETE: return ERRNUM_CHILD;
350 case ERROR_COMMITMENT_LIMIT: return ERRNUM_AGAIN;
351 case ERROR_CONNECTION_ABORTED: return ERRNUM_CONNABORTED;
352 case ERROR_CONNECTION_REFUSED: return ERRNUM_CONNREFUSED;
353 case ERROR_CRC: return ERRNUM_IO;
354 case ERROR_CURRENT_DIRECTORY: return ERRNUM_ACCES;
355 case ERROR_DEVICE_DOOR_OPEN: return ERRNUM_IO;
356 // case ERROR_DEVICE_IN_USE: return ERRNUM_AGAIN; // Cygwin
357 case ERROR_DEVICE_IN_USE: return ERRNUM_BUSY;
358 case ERROR_DEVICE_REQUIRES_CLEANING: return ERRNUM_IO;
359 case ERROR_DEV_NOT_EXIST: return ERRNUM_NODEV;
360 // case ERROR_DEV_NOT_EXIST: return ERRNUM_NOENT; // Cywgin
361 // case ERROR_DIRECTORY: return ERRNUM_INVAL; // Cygwin, <system_error>
362 // case ERROR_DIRECTORY: return ERRNUM_NOENT; // libuv
363 case ERROR_DIRECTORY: return ERRNUM_NOTDIR;
364 case ERROR_DIR_NOT_EMPTY: return ERRNUM_NOTEMPTY;
365 case ERROR_DISK_CORRUPT: return ERRNUM_IO;
366 case ERROR_DISK_FULL: return ERRNUM_NOSPC;
367 case ERROR_DRIVE_LOCKED: return ERRNUM_ACCES;
368 case ERROR_DS_GENERIC_ERROR: return ERRNUM_IO;
369 case ERROR_EAS_DIDNT_FIT: return ERRNUM_NOSPC;
370 case ERROR_EAS_NOT_SUPPORTED: return ERRNUM_NOTSUP;
371 case ERROR_EA_LIST_INCONSISTENT: return ERRNUM_INVAL;
372 case ERROR_EA_TABLE_FULL: return ERRNUM_NOSPC;
373#ifdef ERROR_ELEVATION_REQUIRED
374 case ERROR_ELEVATION_REQUIRED: return ERRNUM_ACCES;
375#endif
376 case ERROR_END_OF_MEDIA: return ERRNUM_NOSPC;
377 case ERROR_EOM_OVERFLOW: return ERRNUM_IO;
378 case ERROR_EXE_MACHINE_TYPE_MISMATCH: return ERRNUM_NOEXEC;
379 case ERROR_EXE_MARKED_INVALID: return ERRNUM_NOEXEC;
380 case ERROR_FAIL_I24: return ERRNUM_ACCES;
381 case ERROR_FILE_CORRUPT: return ERRNUM_EXIST;
382 case ERROR_FILE_EXISTS: return ERRNUM_EXIST;
383 case ERROR_FILE_INVALID: return ERRNUM_NXIO;
384 case ERROR_FILEMARK_DETECTED: return ERRNUM_IO;
385 case ERROR_FILENAME_EXCED_RANGE: return ERRNUM_NAMETOOLONG;
386 // case ERROR_FILENAME_EXCED_RANGE: return ERRNUM_NOENT; // Wine
387 case ERROR_FILE_NOT_FOUND: return ERRNUM_NOENT;
388#ifdef ERROR_FLOAT_MULTIPLE_FAULTS
389 case ERROR_FLOAT_MULTIPLE_FAULTS: return ERRNUM_DOM;
390#endif
391 case ERROR_GEN_FAILURE: return ERRNUM_IO;
392 case ERROR_HANDLE_DISK_FULL: return ERRNUM_NOSPC;
393 case ERROR_HANDLE_EOF: return ERRNUM_NODATA;
394 case ERROR_HOST_UNREACHABLE: return ERRNUM_HOSTUNREACH;
395#ifdef ERROR_ILLEGAL_CHARACTER
396 case ERROR_ILLEGAL_CHARACTER: return ERRNUM_ILSEQ;
397#endif
398 case ERROR_INSUFFICIENT_BUFFER: return ERRNUM_INVAL;
399 case ERROR_INVALID_ACCESS: return ERRNUM_ACCES;
400 case ERROR_INVALID_ADDRESS: return ERRNUM_INVAL;
401 case ERROR_INVALID_AT_INTERRUPT_TIME: return ERRNUM_INTR;
402 case ERROR_INVALID_BLOCK: return ERRNUM_NOMEM;
403 case ERROR_INVALID_BLOCK_LENGTH: return ERRNUM_IO;
404 case ERROR_INVALID_CATEGORY: return ERRNUM_NOTTY;
405 case ERROR_INVALID_DATA: return ERRNUM_INVAL;
406 case ERROR_INVALID_DRIVE: return ERRNUM_NODEV;
407 // case ERROR_INVALID_DRIVE: return ERRNUM_NOENT; // libuv, Wine
408 case ERROR_INVALID_EA_NAME: return ERRNUM_INVAL;
409 case ERROR_INVALID_EXE_SIGNATURE: return ERRNUM_NOEXEC;
410 case ERROR_INVALID_FLAGS: return ERRNUM_BADF;
411 // case ERROR_INVALID_FUNCTION: return ERRNUM_ISDIR; // libuv
412 case ERROR_INVALID_FUNCTION: return ERRNUM_NOSYS;
413 case ERROR_INVALID_HANDLE: return ERRNUM_BADF;
414 // case ERROR_INVALID_HANDLE: return ERRNUM_INVAL; // Boost,
415 // <system_error>
416 case ERROR_INVALID_NAME: return ERRNUM_INVAL;
417 // case ERROR_INVALID_NAME: return ERRNUM_NOENT; // Cygwin, libuv
418 case ERROR_INVALID_PARAMETER: return ERRNUM_INVAL;
419 case ERROR_INVALID_REPARSE_DATA: return ERRNUM_NOENT;
420 case ERROR_INVALID_SIGNAL_NUMBER: return ERRNUM_INVAL;
421 case ERROR_IOPL_NOT_ENABLED: return ERRNUM_NOEXEC;
422 case ERROR_IO_DEVICE: return ERRNUM_IO;
423 case ERROR_IO_INCOMPLETE: return ERRNUM_AGAIN;
424 case ERROR_IO_PENDING: return ERRNUM_AGAIN;
425 case ERROR_LOCK_FAILED: return ERRNUM_ACCES;
426 // case ERROR_LOCK_VIOLATION: return ERRNUM_ACCES; // Wine
427 // case ERROR_LOCK_VIOLATION: return ERRNUM_BUSY; // Cygwin, libuv
428 case ERROR_LOCK_VIOLATION: return ERRNUM_NOLCK;
429 case ERROR_LOCKED: return ERRNUM_NOLCK;
430 case ERROR_MAX_THRDS_REACHED: return ERRNUM_AGAIN;
431 // case ERROR_META_EXPANSION_TOO_LONG: return ERRNUM_2BIG; // libuv
432 case ERROR_META_EXPANSION_TOO_LONG: return ERRNUM_INVAL;
433 case ERROR_MOD_NOT_FOUND: return ERRNUM_NOENT;
434 case ERROR_MORE_DATA: return ERRNUM_MSGSIZE;
435 case ERROR_NEGATIVE_SEEK: return ERRNUM_INVAL;
436 case ERROR_NESTING_NOT_ALLOWED: return ERRNUM_AGAIN;
437 // case ERROR_NETNAME_DELETED: return ERRNUM_CONNRESET; // libuv
438 case ERROR_NETNAME_DELETED: return ERRNUM_NOENT;
439 case ERROR_NETWORK_ACCESS_DENIED: return ERRNUM_ACCES;
440 case ERROR_NETWORK_UNREACHABLE: return ERRNUM_NETUNREACH;
441 // case ERROR_NOACCESS: return ERRNUM_ACCES; // Boost, libuv,
442 // <system_error>
443 case ERROR_NOACCESS: return ERRNUM_FAULT;
444 case ERROR_NONE_MAPPED: return ERRNUM_INVAL;
445 case ERROR_NONPAGED_SYSTEM_RESOURCES: return ERRNUM_AGAIN;
446 case ERROR_NOT_CONNECTED: return ERRNUM_NOTCONN;
447 case ERROR_NOT_ENOUGH_MEMORY: return ERRNUM_NOMEM;
448 case ERROR_NOT_ENOUGH_QUOTA: return ERRNUM_IO;
449 // case ERROR_NOT_ENOUGH_QUOTA: return ERRNUM_NOMEM; // Wine
450 case ERROR_NOT_LOCKED: return ERRNUM_ACCES;
451 case ERROR_NOT_OWNER: return ERRNUM_PERM;
452 case ERROR_NOT_READY: return ERRNUM_AGAIN;
453 case ERROR_NOT_SAME_DEVICE: return ERRNUM_XDEV;
454 case ERROR_NOT_SUPPORTED: return ERRNUM_NOSYS;
455 // case ERROR_NOT_SUPPORTED: return ERRNUM_NOTSUP; // libuv
456 case ERROR_NO_DATA_DETECTED: return ERRNUM_IO;
457 case ERROR_NO_DATA: return ERRNUM_PIPE;
458 case ERROR_NO_MORE_FILES: return ERRNUM_NOENT;
459 case ERROR_NO_MORE_SEARCH_HANDLES: return ERRNUM_NFILE;
460 case ERROR_NO_PROC_SLOTS: return ERRNUM_AGAIN;
461 case ERROR_NO_SIGNAL_SENT: return ERRNUM_IO;
462 case ERROR_NO_SYSTEM_RESOURCES: return ERRNUM_FBIG;
463 case ERROR_NO_TOKEN: return ERRNUM_INVAL;
464 case ERROR_NO_UNICODE_TRANSLATION: return ERRNUM_ILSEQ;
465 case ERROR_OPEN_FAILED: return ERRNUM_IO;
466 case ERROR_OPEN_FILES: return ERRNUM_AGAIN;
467 // case ERROR_OPEN_FILES: return ERRNUM_BUSY; // Cygwin, <system_error>
468 case ERROR_OPERATION_ABORTED: return ERRNUM_CANCELED;
469 case ERROR_OUTOFMEMORY: return ERRNUM_NOMEM;
470 case ERROR_PAGED_SYSTEM_RESOURCES: return ERRNUM_AGAIN;
471 case ERROR_PAGEFILE_QUOTA: return ERRNUM_AGAIN;
472 case ERROR_PATH_NOT_FOUND: return ERRNUM_NOENT;
473 case ERROR_PIPE_BUSY: return ERRNUM_BUSY;
474 case ERROR_PIPE_CONNECTED: return ERRNUM_BUSY;
475 case ERROR_PIPE_NOT_CONNECTED: return ERRNUM_PIPE;
476 case ERROR_POSSIBLE_DEADLOCK: return ERRNUM_DEADLK;
477 case ERROR_PRIVILEGE_NOT_HELD: return ERRNUM_PERM;
478 case ERROR_PROCESS_ABORTED: return ERRNUM_FAULT;
479 case ERROR_PROC_NOT_FOUND: return ERRNUM_SRCH;
480 case ERROR_READ_FAULT: return ERRNUM_IO;
481 case ERROR_RETRY: return ERRNUM_AGAIN;
482 case ERROR_SECTOR_NOT_FOUND: return ERRNUM_INVAL;
483 // case ERROR_SEEK: return ERRNUM_INVAL; // Cygwin
484 case ERROR_SEEK: return ERRNUM_IO;
485 case ERROR_SEEK_ON_DEVICE: return ERRNUM_ACCES;
486 case ERROR_SEM_TIMEOUT: return ERRNUM_TIMEDOUT;
487 case ERROR_SERVICE_REQUEST_TIMEOUT: return ERRNUM_BUSY;
488 case ERROR_SETMARK_DETECTED: return ERRNUM_IO;
489 case ERROR_SHARING_BUFFER_EXCEEDED: return ERRNUM_NOLCK;
490 case ERROR_SHARING_VIOLATION: return ERRNUM_ACCES;
491 // case ERROR_SHARING_VIOLATION: return ERRNUM_BUSY; // Cygwin, libuv
492 case ERROR_SIGNAL_PENDING: return ERRNUM_BUSY;
493 case ERROR_SIGNAL_REFUSED: return ERRNUM_IO;
494#ifdef ERROR_SYMLINK_NOT_SUPPORTED
495 case ERROR_SYMLINK_NOT_SUPPORTED: return ERRNUM_INVAL;
496#endif
497 case ERROR_THREAD_1_INACTIVE: return ERRNUM_INVAL;
498 // case ERROR_TIMEOUT: return ERRNUM_BUSY; // Cygwin
499 case ERROR_TIMEOUT: return ERRNUM_TIMEDOUT;
500 case ERROR_TOO_MANY_LINKS: return ERRNUM_MLINK;
501 case ERROR_TOO_MANY_OPEN_FILES: return ERRNUM_MFILE;
502 case ERROR_UNEXP_NET_ERR: return ERRNUM_IO;
503 case ERROR_WAIT_NO_CHILDREN: return ERRNUM_CHILD;
504 case ERROR_WORKING_SET_QUOTA: return ERRNUM_AGAIN;
505 case ERROR_WRITE_FAULT: return ERRNUM_IO;
506 // case ERROR_WRITE_PROTECT: return ERRNUM_ACCES; // Boost,
507 // <system_error>
508 case ERROR_WRITE_PROTECT: return ERRNUM_ROFS;
509 case WSAEACCES: return ERRNUM_ACCES;
510 case WSAEADDRINUSE: return ERRNUM_ADDRINUSE;
511 case WSAEADDRNOTAVAIL: return ERRNUM_ADDRNOTAVAIL;
512 case WSAEAFNOSUPPORT: return ERRNUM_AFNOSUPPORT;
513 case WSAEALREADY: return ERRNUM_ALREADY;
514 case WSAEBADF: return ERRNUM_BADF;
515 case WSAECONNABORTED: return ERRNUM_CONNABORTED;
516 case WSAECONNREFUSED: return ERRNUM_CONNREFUSED;
517 case WSAECONNRESET: return ERRNUM_CONNRESET;
518 case WSAEDESTADDRREQ: return ERRNUM_DESTADDRREQ;
519 case WSAEFAULT: return ERRNUM_FAULT;
520 case WSAEHOSTUNREACH: return ERRNUM_HOSTUNREACH;
521 case WSAEINPROGRESS: return ERRNUM_INPROGRESS;
522 // case WSAEINTR: return ERRNUM_CANCELED; // libuv
523 case WSAEINTR: return ERRNUM_INTR;
524 case WSAEINVAL: return ERRNUM_INVAL;
525 case WSAEISCONN: return ERRNUM_ISCONN;
526 case WSAEMFILE: return ERRNUM_MFILE;
527 case WSAEMSGSIZE: return ERRNUM_MSGSIZE;
528 case WSAENAMETOOLONG: return ERRNUM_NAMETOOLONG;
529 case WSAENETDOWN: return ERRNUM_NETDOWN;
530 case WSAENETRESET: return ERRNUM_NETRESET;
531 case WSAENETUNREACH: return ERRNUM_NETUNREACH;
532 case WSAENOBUFS: return ERRNUM_NOBUFS;
533 case WSAENOPROTOOPT: return ERRNUM_NOPROTOOPT;
534 case WSAENOTCONN: return ERRNUM_NOTCONN;
535 case WSAENOTSOCK: return ERRNUM_NOTSOCK;
536 case WSAEOPNOTSUPP: return ERRNUM_OPNOTSUPP;
537 case WSAEPFNOSUPPORT: return ERRNUM_INVAL;
538 case WSAEPROTONOSUPPORT: return ERRNUM_PROTONOSUPPORT;
539 case WSAEPROTOTYPE: return ERRNUM_PROTOTYPE;
540 case WSAESHUTDOWN: return ERRNUM_PIPE;
541 case WSAESOCKTNOSUPPORT: return ERRNUM_AI_SOCKTYPE;
542 // case WSAESOCKTNOSUPPORT: return ERRNUM_INVAL; // libuv
543 case WSAETIMEDOUT: return ERRNUM_TIMEDOUT;
544 // case WSAEWOULDBLOCK: return ERRNUM_AGAIN; // libuv
545 case WSAEWOULDBLOCK: return ERRNUM_WOULDBLOCK;
546 case WSAHOST_NOT_FOUND: return ERRNUM_AI_NONAME;
547 // case WSAHOST_NOT_FOUND: return ERRNUM_NOENT; // libuv
548 case WSANO_DATA: return ERRNUM_NOENT;
549 case WSANO_RECOVERY: return ERRNUM_AI_FAIL;
550 case WSATRY_AGAIN: return ERRNUM_AI_AGAIN;
551 case WSATYPE_NOT_FOUND: return ERRNUM_AI_SERVICE;
552 default: return 0;
553 }
554#else
555#if _POSIX_C_SOURCE >= 200112L && !defined(__NEWLIB__)
556 switch (errc) {
557 case -ABS(EAI_AGAIN): return ERRNUM_AI_AGAIN;
558 case -ABS(EAI_BADFLAGS): return ERRNUM_AI_BADFLAGS;
559 case -ABS(EAI_FAIL): return ERRNUM_AI_FAIL;
560 case -ABS(EAI_FAMILY): return ERRNUM_AI_FAMILY;
561 case -ABS(EAI_MEMORY): return ERRNUM_AI_MEMORY;
562 case -ABS(EAI_NONAME): return ERRNUM_AI_NONAME;
563 case -ABS(EAI_OVERFLOW): return ERRNUM_AI_OVERFLOW;
564 case -ABS(EAI_SERVICE): return ERRNUM_AI_SERVICE;
565 case -ABS(EAI_SOCKTYPE): return ERRNUM_AI_SOCKTYPE;
566 default: break;
567 }
568#endif
569 return errno2num(errc);
570#endif // _WIN32
571}
572
573int
575{
576 switch (errnum) {
577#ifdef E2BIG
578 case ERRNUM_2BIG: return E2BIG;
579#endif
580#ifdef EACCES
581 case ERRNUM_ACCES: return EACCES;
582#endif
583#ifdef EADDRINUSE
584 case ERRNUM_ADDRINUSE: return EADDRINUSE;
585#endif
586#ifdef EADDRNOTAVAIL
587 case ERRNUM_ADDRNOTAVAIL: return EADDRNOTAVAIL;
588#endif
589#ifdef EAFNOSUPPORT
590 case ERRNUM_AFNOSUPPORT: return EAFNOSUPPORT;
591#endif
592#ifdef EAGAIN
593 case ERRNUM_AGAIN: return EAGAIN;
594#endif
595#ifdef EALREADY
596 case ERRNUM_ALREADY: return EALREADY;
597#endif
598#ifdef EBADF
599 case ERRNUM_BADF: return EBADF;
600#endif
601#ifdef EBADMSG
602 case ERRNUM_BADMSG: return EBADMSG;
603#endif
604#ifdef EBUSY
605 case ERRNUM_BUSY: return EBUSY;
606#endif
607#ifdef ECANCELED
608 case ERRNUM_CANCELED: return ECANCELED;
609#endif
610#ifdef ECHILD
611 case ERRNUM_CHILD: return ECHILD;
612#endif
613#ifdef ECONNABORTED
614 case ERRNUM_CONNABORTED: return ECONNABORTED;
615#endif
616#ifdef ECONNREFUSED
617 case ERRNUM_CONNREFUSED: return ECONNREFUSED;
618#endif
619#ifdef ECONNRESET
620 case ERRNUM_CONNRESET: return ECONNRESET;
621#endif
622#ifdef EDEADLK
623 case ERRNUM_DEADLK: return EDEADLK;
624#endif
625#ifdef EDESTADDRREQ
626 case ERRNUM_DESTADDRREQ: return EDESTADDRREQ;
627#endif
628#ifdef EDOM
629 case ERRNUM_DOM: return EDOM;
630#endif
631// #ifdef EDQUOT
632// case ERRNUM_DQUOT: return EDQUOT;
633// #endif
634#ifdef EEXIST
635 case ERRNUM_EXIST: return EEXIST;
636#endif
637#ifdef EFAULT
638 case ERRNUM_FAULT: return EFAULT;
639#endif
640#ifdef EFBIG
641 case ERRNUM_FBIG: return EFBIG;
642#endif
643#ifdef EHOSTUNREACH
644 case ERRNUM_HOSTUNREACH: return EHOSTUNREACH;
645#endif
646#ifdef EIDRM
647 case ERRNUM_IDRM: return EIDRM;
648#endif
649#ifdef EILSED
650 case ERRNUM_ILSEQ: return EILSEQ;
651#endif
652#ifdef EINPROGRESS
653 case ERRNUM_INPROGRESS: return EINPROGRESS;
654#endif
655#ifdef EINTR
656 case ERRNUM_INTR: return EINTR;
657#endif
658#ifdef EINVAL
659 case ERRNUM_INVAL: return EINVAL;
660#endif
661#ifdef EIO
662 case ERRNUM_IO: return EIO;
663#endif
664#ifdef EISCONN
665 case ERRNUM_ISCONN: return EISCONN;
666#endif
667#ifdef EISDIR
668 case ERRNUM_ISDIR: return EISDIR;
669#endif
670#ifdef ELOOP
671 case ERRNUM_LOOP: return ELOOP;
672#endif
673#ifdef EMFILE
674 case ERRNUM_MFILE: return EMFILE;
675#endif
676#ifdef EMLINK
677 case ERRNUM_MLINK: return EMLINK;
678#endif
679#ifdef EMSGSIZE
680 case ERRNUM_MSGSIZE: return EMSGSIZE;
681#endif
682// #ifdef EMULTIHOP
683// case ERRNUM_MULTIHOP: return EMULTIHOP;
684// #endif
685#ifdef ENAMETOOLONG
686 case ERRNUM_NAMETOOLONG: return ENAMETOOLONG;
687#endif
688#ifdef ENETDOWN
689 case ERRNUM_NETDOWN: return ENETDOWN;
690#endif
691#ifdef ENETRESET
692 case ERRNUM_NETRESET: return ENETRESET;
693#endif
694#ifdef ENETUNREACH
695 case ERRNUM_NETUNREACH: return ENETUNREACH;
696#endif
697#ifdef ENFILE
698 case ERRNUM_NFILE: return ENFILE;
699#endif
700#ifdef ENOBUFS
701 case ERRNUM_NOBUFS: return ENOBUFS;
702#endif
703#ifdef ENODATA
704 case ERRNUM_NODATA: return ENODATA;
705#endif
706#ifdef ENODEV
707 case ERRNUM_NODEV: return ENODEV;
708#endif
709#ifdef ENOENT
710 case ERRNUM_NOENT: return ENOENT;
711#endif
712#ifdef ENOEXEC
713 case ERRNUM_NOEXEC: return ENOEXEC;
714#endif
715#ifdef ENOLCK
716 case ERRNUM_NOLCK: return ENOLCK;
717#endif
718// #ifdef ENOLINK
719// case ERRNUM_NOLINK: return ENOLINK;
720// #endif
721#ifdef ENOMEM
722 case ERRNUM_NOMEM: return ENOMEM;
723#endif
724#ifdef ENOMSG
725 case ERRNUM_NOMSG: return ENOMSG;
726#endif
727#ifdef ENOPROTOOPT
728 case ERRNUM_NOPROTOOPT: return ENOPROTOOPT;
729#endif
730#ifdef ENOSPC
731 case ERRNUM_NOSPC: return ENOSPC;
732#endif
733#ifdef ENOSR
734 case ERRNUM_NOSR: return ENOSR;
735#endif
736#ifdef ENOSTR
737 case ERRNUM_NOSTR: return ENOSTR;
738#endif
739#ifdef ENOSYS
740 case ERRNUM_NOSYS: return ENOSYS;
741#endif
742#ifdef ENOTCONN
743 case ERRNUM_NOTCONN: return ENOTCONN;
744#endif
745#ifdef ENOTDIR
746 case ERRNUM_NOTDIR: return ENOTDIR;
747#endif
748#ifdef ENOTEMPTY
749 case ERRNUM_NOTEMPTY: return ENOTEMPTY;
750#endif
751#ifdef ENOTRECOVERABLE
752 case ERRNUM_NOTRECOVERABLE: return ENOTRECOVERABLE;
753#endif
754#ifdef ENOTSOCK
755 case ERRNUM_NOTSOCK: return ENOTSOCK;
756#endif
757#ifdef ENOTSUP
758 case ERRNUM_NOTSUP: return ENOTSUP;
759#endif
760#ifdef ENOTTY
761 case ERRNUM_NOTTY: return ENOTTY;
762#endif
763#ifdef ENXIO
764 case ERRNUM_NXIO: return ENXIO;
765#endif
766#ifdef EOPNOTSUPP
767 case ERRNUM_OPNOTSUPP: return EOPNOTSUPP;
768#endif
769#ifdef EOVERFLOW
770 case ERRNUM_OVERFLOW: return EOVERFLOW;
771#endif
772#ifdef EOWNERDEAD
773 case ERRNUM_OWNERDEAD: return EOWNERDEAD;
774#endif
775#ifdef EPERM
776 case ERRNUM_PERM: return EPERM;
777#endif
778#ifdef EPIPE
779 case ERRNUM_PIPE: return EPIPE;
780#endif
781#ifdef EPROTO
782 case ERRNUM_PROTO: return EPROTO;
783#endif
784#ifdef EPROTONOSUPPORT
785 case ERRNUM_PROTONOSUPPORT: return EPROTONOSUPPORT;
786#endif
787#ifdef EPROTOTYPE
788 case ERRNUM_PROTOTYPE: return EPROTOTYPE;
789#endif
790#ifdef ERANGE
791 case ERRNUM_RANGE: return ERANGE;
792#endif
793#ifdef EROFS
794 case ERRNUM_ROFS: return EROFS;
795#endif
796#ifdef ESPIPE
797 case ERRNUM_SPIPE: return ESPIPE;
798#endif
799#ifdef ESRCH
800 case ERRNUM_SRCH: return ESRCH;
801#endif
802// #ifdef ESTALE
803// case ERRNUM_STALE: return ESTALE;
804// #endif
805#ifdef ETIME
806 case ERRNUM_TIME: return ETIME;
807#endif
808#ifdef ETIMEDOUT
809 case ERRNUM_TIMEDOUT: return ETIMEDOUT;
810#endif
811#ifdef ETXTBSY
812 case ERRNUM_TXTBSY: return ETXTBSY;
813#endif
814#ifdef EWOULDBLOCK
815 case ERRNUM_WOULDBLOCK: return EWOULDBLOCK;
816#endif
817#ifdef EXDEV
818 case ERRNUM_XDEV: return EXDEV;
819#endif
820 default: return 0;
821 }
822}
823
824int
826{
827#if _WIN32
828 switch (errnum) {
829 case ERRNUM_2BIG: return ERROR_BAD_ENVIRONMENT;
830 case ERRNUM_ACCES: return ERROR_ACCESS_DENIED;
831 case ERRNUM_ADDRINUSE: return WSAEADDRINUSE;
832 case ERRNUM_ADDRNOTAVAIL: return WSAEADDRNOTAVAIL;
833 case ERRNUM_AFNOSUPPORT: return WSAEAFNOSUPPORT;
834 case ERRNUM_AGAIN: return ERROR_RETRY;
835 case ERRNUM_ALREADY: return WSAEALREADY;
836 case ERRNUM_BADF: return ERROR_INVALID_HANDLE;
837 // case ERRNUM_BADMSG: return ...;
838 case ERRNUM_BUSY: return ERROR_BUSY;
839 case ERRNUM_CANCELED: return ERROR_OPERATION_ABORTED;
840 case ERRNUM_CHILD: return ERROR_WAIT_NO_CHILDREN;
841 case ERRNUM_CONNABORTED: return WSAECONNABORTED;
842 case ERRNUM_CONNREFUSED: return WSAECONNREFUSED;
843 case ERRNUM_CONNRESET: return WSAECONNRESET;
844 case ERRNUM_DEADLK: return ERROR_POSSIBLE_DEADLOCK;
845 case ERRNUM_DESTADDRREQ: return WSAEDESTADDRREQ;
846#ifdef ERROR_FLOAT_MULTIPLE_FAULTS
847 case ERRNUM_DOM: return ERROR_FLOAT_MULTIPLE_FAULTS;
848#endif
849 // case ERRNUM_DQUOT: return ...;
850 case ERRNUM_EXIST: return ERROR_FILE_EXISTS;
851 case ERRNUM_FAULT: return ERROR_NOACCESS;
852 case ERRNUM_FBIG: return ERROR_NO_SYSTEM_RESOURCES;
853 // clang-format off
854 case ERRNUM_HOSTUNREACH: return WSAEHOSTUNREACH;
855 // case ERRNUM_IDRM: return ...;
856#ifdef ERROR_ILLEGAL_CHARACTER
857 case ERRNUM_ILSEQ: return ERROR_ILLEGAL_CHARACTER;
858#endif
859 // clang-format on
860 case ERRNUM_INPROGRESS: return WSAEINPROGRESS;
861 case ERRNUM_INTR: return WSAEINTR;
862 case ERRNUM_INVAL: return ERROR_INVALID_PARAMETER;
863 case ERRNUM_IO: return ERROR_IO_DEVICE;
864 case ERRNUM_ISCONN: return WSAEISCONN;
865 case ERRNUM_ISDIR: return ERROR_FILE_EXISTS;
866 case ERRNUM_LOOP: return ERROR_CANT_RESOLVE_FILENAME;
867 case ERRNUM_MFILE: return ERROR_TOO_MANY_OPEN_FILES;
868 case ERRNUM_MLINK: return ERROR_TOO_MANY_LINKS;
869 case ERRNUM_MSGSIZE: return WSAEMSGSIZE;
870 // case ERRNUM_MULTIHOP: return ...;
871 case ERRNUM_NAMETOOLONG: return ERROR_FILENAME_EXCED_RANGE;
872 case ERRNUM_NETDOWN: return WSAENETDOWN;
873 case ERRNUM_NETRESET: return WSAENETRESET;
874 case ERRNUM_NETUNREACH: return WSAENETUNREACH;
875 case ERRNUM_NFILE: return ERROR_NO_MORE_SEARCH_HANDLES;
876 case ERRNUM_NOBUFS: return WSAENOBUFS;
877 case ERRNUM_NODATA: return ERROR_HANDLE_EOF;
878 case ERRNUM_NODEV: return ERROR_DEV_NOT_EXIST;
879 case ERRNUM_NOENT: return ERROR_PATH_NOT_FOUND;
880 case ERRNUM_NOEXEC: return ERROR_BAD_FORMAT;
881 case ERRNUM_NOLCK: return ERROR_LOCK_VIOLATION;
882 // case ERRNUM_NOLINK: return ERROR_NOT_CONNECTED;
883 case ERRNUM_NOMEM: return ERROR_NOT_ENOUGH_MEMORY;
884 // case ERRNUM_NOMSG: return ...;
885 case ERRNUM_NOPROTOOPT: return WSAENOPROTOOPT;
886 case ERRNUM_NOSPC: return ERROR_DISK_FULL;
887 // case ERRNUM_NOSR: return ...;
888 // case ERRNUM_NOSTR: return ...;
889 case ERRNUM_NOSYS: return ERROR_CALL_NOT_IMPLEMENTED;
890 case ERRNUM_NOTCONN: return WSAENOTCONN;
891 case ERRNUM_NOTDIR: return ERROR_DIRECTORY;
892 case ERRNUM_NOTEMPTY: return ERROR_DIR_NOT_EMPTY;
893 // case ERRNUM_NOTRECOVERABLE: return ...;
894 case ERRNUM_NOTSOCK: return WSAENOTSOCK;
895 case ERRNUM_NOTSUP: return ERROR_EAS_NOT_SUPPORTED;
896 case ERRNUM_NOTTY: return ERROR_INVALID_CATEGORY;
897 case ERRNUM_NXIO: return ERROR_FILE_INVALID;
898 case ERRNUM_OPNOTSUPP: return WSAEOPNOTSUPP;
899 case ERRNUM_OVERFLOW: return ERROR_INVALID_PARAMETER;
900 // case ERRNUM_OWNERDEAD: return ...;
901 case ERRNUM_PERM: return ERROR_PRIVILEGE_NOT_HELD;
902 case ERRNUM_PIPE: return ERROR_BROKEN_PIPE;
903 // case ERRNUM_PROTO: return ...;
904 case ERRNUM_PROTONOSUPPORT: return WSAEPROTONOSUPPORT;
905 case ERRNUM_PROTOTYPE: return WSAEPROTOTYPE;
906 case ERRNUM_RANGE: return ERROR_ARITHMETIC_OVERFLOW;
907 case ERRNUM_ROFS: return ERROR_WRITE_PROTECT;
908 case ERRNUM_SPIPE: return ERROR_SEEK;
909 case ERRNUM_SRCH: return ERROR_PROC_NOT_FOUND;
910 // case ERRNUM_STALE: return ...;
911 // case ERRNUM_TIME: return ...;
912 case ERRNUM_TIMEDOUT: return ERROR_TIMEOUT;
913 // case ERRNUM_TXTBSY: return ...;
914 case ERRNUM_WOULDBLOCK: return WSAEWOULDBLOCK;
915 case ERRNUM_XDEV: return ERROR_NOT_SAME_DEVICE;
916 case ERRNUM_AI_AGAIN: return WSATRY_AGAIN;
917 case ERRNUM_AI_BADFLAGS: return WSAEINVAL;
918 case ERRNUM_AI_FAIL: return WSANO_RECOVERY;
919 case ERRNUM_AI_FAMILY: return WSAEAFNOSUPPORT;
920 case ERRNUM_AI_MEMORY: return ERROR_NOT_ENOUGH_MEMORY;
921 case ERRNUM_AI_NONAME: return WSAHOST_NOT_FOUND;
922 case ERRNUM_AI_SERVICE: return WSATYPE_NOT_FOUND;
923 case ERRNUM_AI_SOCKTYPE: return WSAESOCKTNOSUPPORT;
924 case ERRNUM_AI_OVERFLOW: return WSAEFAULT;
925 default: return 0;
926 }
927#else
928#if _POSIX_C_SOURCE >= 200112L && !defined(__NEWLIB__)
929 switch (errnum) {
930 case ERRNUM_AI_AGAIN: return -ABS(EAI_AGAIN);
931 case ERRNUM_AI_BADFLAGS: return -ABS(EAI_BADFLAGS);
932 case ERRNUM_AI_FAIL: return -ABS(EAI_FAIL);
933 case ERRNUM_AI_FAMILY: return -ABS(EAI_FAMILY);
934 case ERRNUM_AI_MEMORY: return -ABS(EAI_MEMORY);
935 case ERRNUM_AI_NONAME: return -ABS(EAI_NONAME);
936 case ERRNUM_AI_OVERFLOW: return -ABS(EAI_OVERFLOW);
937 case ERRNUM_AI_SERVICE: return -ABS(EAI_SERVICE);
938 case ERRNUM_AI_SOCKTYPE: return -ABS(EAI_SOCKTYPE);
939 default: break;
940 }
941#endif
942 return errnum2no(errnum);
943#endif // _WIN32
944}
945
946int
948{
949#if _WIN32
950 return GetLastError();
951#else
952 return errno;
953#endif
954}
955
956void
957set_errc(int errc)
958{
959#if _WIN32
960 SetLastError(errc);
961#else
962 errno = errc;
963#endif
964}
965
966const char *
968{
969 return strerror(errnum);
970}
971
972const char *
973errc2str(int errc)
974{
975#if _WIN32
976 // clang-format off
977 if (!FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM
978 | FORMAT_MESSAGE_IGNORE_INSERTS,
979 NULL, errc, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
980 errstr, sizeof(errstr), NULL))
981 return NULL;
982 // clang-format on
983 // Remove terminating line-break ("\r\n") from error message.
984 size_t n = strlen(errstr);
985 if (n >= 2)
986 errstr[n - 2] = '\0';
987 return errstr;
988#else
989#if _POSIX_C_SOURCE >= 200112L && !defined(__NEWLIB__)
990 switch (errc) {
991 case -ABS(EAI_AGAIN): return gai_strerror(EAI_AGAIN);
992 case -ABS(EAI_BADFLAGS): return gai_strerror(EAI_BADFLAGS);
993 case -ABS(EAI_FAIL): return gai_strerror(EAI_FAIL);
994 case -ABS(EAI_FAMILY): return gai_strerror(EAI_FAMILY);
995 case -ABS(EAI_MEMORY): return gai_strerror(EAI_MEMORY);
996 case -ABS(EAI_NONAME): return gai_strerror(EAI_NONAME);
997 case -ABS(EAI_OVERFLOW): return gai_strerror(EAI_OVERFLOW);
998 case -ABS(EAI_SERVICE): return gai_strerror(EAI_SERVICE);
999 case -ABS(EAI_SOCKTYPE): return gai_strerror(EAI_SOCKTYPE);
1000 }
1001#endif
1002 return errno2str(errc);
1003#endif
1004}
errnum_t errno2num(int errnum)
Transforms a standard C error number to a platform-independent error number.
Definition: errnum.c:53
errnum_t errc2num(int errc)
Transforms a native error code to a platform-independent error number.
Definition: errnum.c:310
int errnum2c(errnum_t errnum)
Transforms a platform-independent error number to a native error code.
Definition: errnum.c:825
int get_errc(void)
Returns the last (thread-specific) native error code set by a system call or library function.
Definition: errnum.c:947
const char * errno2str(int errnum)
Returns a string describing a standard C error number.
Definition: errnum.c:967
void set_errc(int errc)
Sets the current (thread-specific) native error code to errc.
Definition: errnum.c:957
int errc2no(int errc)
Transforms a native error code to a standard C error number.
Definition: errnum.c:300
const char * errc2str(int errc)
Returns a string describing a native error code.
Definition: errnum.c:973
int errnum2no(errnum_t errnum)
Transforms a platform-independent error number to a standard C error number.
Definition: errnum.c:574
int errno2c(int errnum)
Transforms a standard C error number to a native error code.
Definition: errnum.c:43
This header file is part of the utilities library; it contains the native and platform-independent er...
errnum
The platform-independent error numbers.
Definition: errnum.h:74
@ ERRNUM_NOSPC
No space left on device.
Definition: errnum.h:175
@ ERRNUM_AI_MEMORY
There was a memory allocation failure.
Definition: errnum.h:248
@ ERRNUM_NOSYS
Function not supported.
Definition: errnum.h:181
@ ERRNUM_WOULDBLOCK
Operation would block.
Definition: errnum.h:230
@ ERRNUM_OWNERDEAD
Previous owner died.
Definition: errnum.h:203
@ ERRNUM_PROTO
Protocol error.
Definition: errnum.h:209
@ ERRNUM_BADMSG
Bad message.
Definition: errnum.h:92
@ ERRNUM_AFNOSUPPORT
Address family not supported.
Definition: errnum.h:84
@ ERRNUM_NOTCONN
The socket is not connected.
Definition: errnum.h:183
@ ERRNUM_NXIO
No such device or address.
Definition: errnum.h:197
@ ERRNUM_IDRM
Identifier removed.
Definition: errnum.h:121
@ ERRNUM_AI_BADFLAGS
The flags had an invalid value.
Definition: errnum.h:239
@ ERRNUM_RANGE
Result too large.
Definition: errnum.h:215
@ ERRNUM_MSGSIZE
Message too large.
Definition: errnum.h:143
@ ERRNUM_INTR
Interrupted function.
Definition: errnum.h:127
@ ERRNUM_SPIPE
Invalid seek.
Definition: errnum.h:219
@ ERRNUM_ALREADY
Connection already in progress.
Definition: errnum.h:88
@ ERRNUM_NOPROTOOPT
Protocol not available.
Definition: errnum.h:173
@ ERRNUM_BUSY
Device or resource busy.
Definition: errnum.h:94
@ ERRNUM_ISCONN
Socket is connected.
Definition: errnum.h:133
@ ERRNUM_NETDOWN
Network is down.
Definition: errnum.h:148
@ ERRNUM_SRCH
No such process.
Definition: errnum.h:221
@ ERRNUM_MLINK
Too many links.
Definition: errnum.h:141
@ ERRNUM_IO
I/O error.
Definition: errnum.h:131
@ ERRNUM_TIMEDOUT
Connection timed out.
Definition: errnum.h:226
@ ERRNUM_NOENT
No such file or directory.
Definition: errnum.h:162
@ ERRNUM_NFILE
Too many files open in system.
Definition: errnum.h:154
@ ERRNUM_AI_SOCKTYPE
The intended socket type was not recognized.
Definition: errnum.h:256
@ ERRNUM_BADF
Bad file descriptor.
Definition: errnum.h:90
@ ERRNUM_OPNOTSUPP
Operation not supported on socket.
Definition: errnum.h:199
@ ERRNUM_NOTTY
Inappropriate I/O control operation.
Definition: errnum.h:195
@ ERRNUM_PERM
Operation not permitted.
Definition: errnum.h:205
@ ERRNUM_PROTONOSUPPORT
Protocol not supported.
Definition: errnum.h:211
@ ERRNUM_NOMEM
Not enough space.
Definition: errnum.h:169
@ ERRNUM_TIME
Stream ioctl() timeout.
Definition: errnum.h:224
@ ERRNUM_FBIG
File too large.
Definition: errnum.h:117
@ ERRNUM_2BIG
Argument list too long.
Definition: errnum.h:76
@ ERRNUM_NOEXEC
Executable file format error.
Definition: errnum.h:164
@ ERRNUM_NOTSUP
Not supported.
Definition: errnum.h:193
@ ERRNUM_CHILD
No child process.
Definition: errnum.h:98
@ ERRNUM_NOTSOCK
Not a socket.
Definition: errnum.h:191
@ ERRNUM_NOTDIR
Not a directory or a symbolic link to a directory.
Definition: errnum.h:185
@ ERRNUM_MFILE
File descriptor value too large.
Definition: errnum.h:139
@ ERRNUM_ACCES
Permission denied.
Definition: errnum.h:78
@ ERRNUM_ADDRNOTAVAIL
Address not available.
Definition: errnum.h:82
@ ERRNUM_INVAL
Invalid argument.
Definition: errnum.h:129
@ ERRNUM_AI_AGAIN
The name could not be resolved at this time.
Definition: errnum.h:237
@ ERRNUM_CONNABORTED
Connection aborted.
Definition: errnum.h:100
@ ERRNUM_NOTEMPTY
Directory not empty.
Definition: errnum.h:187
@ ERRNUM_AI_FAIL
A non-recoverable error occurred.
Definition: errnum.h:241
@ ERRNUM_PROTOTYPE
Protocol wrong type for socket.
Definition: errnum.h:213
@ ERRNUM_ADDRINUSE
Address in use.
Definition: errnum.h:80
@ ERRNUM_NOMSG
No message of the desired type.
Definition: errnum.h:171
@ ERRNUM_AGAIN
Resource unavailable, try again.
Definition: errnum.h:86
@ ERRNUM_ROFS
Read-only file system.
Definition: errnum.h:217
@ ERRNUM_NOBUFS
No buffer space available.
Definition: errnum.h:156
@ ERRNUM_CONNREFUSED
Connection refused.
Definition: errnum.h:102
@ ERRNUM_DOM
Mathematics argument out of domain of function.
Definition: errnum.h:110
@ ERRNUM_NETRESET
Connection aborted by network.
Definition: errnum.h:150
@ ERRNUM_HOSTUNREACH
Host is unreachable.
Definition: errnum.h:119
@ ERRNUM_DEADLK
Resource deadlock would occur.
Definition: errnum.h:106
@ ERRNUM_EXIST
File exists.
Definition: errnum.h:113
@ ERRNUM_NODATA
No message is available on the STREAM head read queue.
Definition: errnum.h:158
@ ERRNUM_ISDIR
Is a directory.
Definition: errnum.h:135
@ ERRNUM_OVERFLOW
Value too large to be stored in data type.
Definition: errnum.h:201
@ ERRNUM_AI_OVERFLOW
An argument buffer overflowed.
Definition: errnum.h:252
@ ERRNUM_PIPE
Broken pipe.
Definition: errnum.h:207
@ ERRNUM_TXTBSY
Text file busy.
Definition: errnum.h:228
@ ERRNUM_AI_FAMILY
The address family was not recognized or the address length was invalid for the specified family.
Definition: errnum.h:246
@ ERRNUM_NOSR
No STREAM resources.
Definition: errnum.h:177
@ ERRNUM_NOSTR
Not a STREAM.
Definition: errnum.h:179
@ ERRNUM_ILSEQ
Illegal byte sequence.
Definition: errnum.h:123
@ ERRNUM_CONNRESET
Connection reset.
Definition: errnum.h:104
@ ERRNUM_INPROGRESS
Operation in progress.
Definition: errnum.h:125
@ ERRNUM_AI_SERVICE
The service passed was not recognized for the specified socket type.
Definition: errnum.h:254
@ ERRNUM_NODEV
No such device.
Definition: errnum.h:160
@ ERRNUM_FAULT
Bad address.
Definition: errnum.h:115
@ ERRNUM_LOOP
Too many levels of symbolic links.
Definition: errnum.h:137
@ ERRNUM_NETUNREACH
Network unreachable.
Definition: errnum.h:152
@ ERRNUM_AI_NONAME
The name does not resolve for the supplied parameters.
Definition: errnum.h:250
@ ERRNUM_XDEV
Cross-device link.
Definition: errnum.h:232
@ ERRNUM_DESTADDRREQ
Destination address required.
Definition: errnum.h:108
@ ERRNUM_NAMETOOLONG
Filename too long.
Definition: errnum.h:146
@ ERRNUM_CANCELED
Operation canceled.
Definition: errnum.h:96
@ ERRNUM_NOTRECOVERABLE
State not recoverable.
Definition: errnum.h:189
@ ERRNUM_NOLCK
No locks available.
Definition: errnum.h:166
enum errnum errnum_t
The platform-independent error number type.
Definition: errnum.h:263
#define _Thread_local
An object whose identifier is declared with the storage-class specifier _Thread_local has thread stor...
Definition: features.h:239
This is the public header file of the utilities library.
#define ABS(a)
Returns the absolute value of a.
Definition: util.h:30
This is the internal header file of the utilities library.
This header file is part of the C11 and POSIX compatibility library; it includes <string....