1/*
2 * This file is part of the MicroPython project, http://micropython.org/
3 *
4 * The MIT License (MIT)
5 *
6 * Copyright (c) 2016 Damien P. George
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a copy
9 * of this software and associated documentation files (the "Software"), to deal
10 * in the Software without restriction, including without limitation the rights
11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 * copies of the Software, and to permit persons to whom the Software is
13 * furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 * THE SOFTWARE.
25 */
26#ifndef MICROPY_INCLUDED_PY_MPERRNO_H
27#define MICROPY_INCLUDED_PY_MPERRNO_H
28
29#include "py/mpconfig.h"
30
31#if MICROPY_USE_INTERNAL_ERRNO
32
33// MP_Exxx errno's are defined directly as numeric values
34// (Linux constants are used as a reference)
35
36#define MP_EPERM (1) // Operation not permitted
37#define MP_ENOENT (2) // No such file or directory
38#define MP_ESRCH (3) // No such process
39#define MP_EINTR (4) // Interrupted system call
40#define MP_EIO (5) // I/O error
41#define MP_ENXIO (6) // No such device or address
42#define MP_E2BIG (7) // Argument list too long
43#define MP_ENOEXEC (8) // Exec format error
44#define MP_EBADF (9) // Bad file number
45#define MP_ECHILD (10) // No child processes
46#define MP_EAGAIN (11) // Try again
47#define MP_ENOMEM (12) // Out of memory
48#define MP_EACCES (13) // Permission denied
49#define MP_EFAULT (14) // Bad address
50#define MP_ENOTBLK (15) // Block device required
51#define MP_EBUSY (16) // Device or resource busy
52#define MP_EEXIST (17) // File exists
53#define MP_EXDEV (18) // Cross-device link
54#define MP_ENODEV (19) // No such device
55#define MP_ENOTDIR (20) // Not a directory
56#define MP_EISDIR (21) // Is a directory
57#define MP_EINVAL (22) // Invalid argument
58#define MP_ENFILE (23) // File table overflow
59#define MP_EMFILE (24) // Too many open files
60#define MP_ENOTTY (25) // Not a typewriter
61#define MP_ETXTBSY (26) // Text file busy
62#define MP_EFBIG (27) // File too large
63#define MP_ENOSPC (28) // No space left on device
64#define MP_ESPIPE (29) // Illegal seek
65#define MP_EROFS (30) // Read-only file system
66#define MP_EMLINK (31) // Too many links
67#define MP_EPIPE (32) // Broken pipe
68#define MP_EDOM (33) // Math argument out of domain of func
69#define MP_ERANGE (34) // Math result not representable
70#define MP_EWOULDBLOCK MP_EAGAIN // Operation would block
71#define MP_EOPNOTSUPP (95) // Operation not supported on transport endpoint
72#define MP_EAFNOSUPPORT (97) // Address family not supported by protocol
73#define MP_EADDRINUSE (98) // Address already in use
74#define MP_ECONNABORTED (103) // Software caused connection abort
75#define MP_ECONNRESET (104) // Connection reset by peer
76#define MP_ENOBUFS (105) // No buffer space available
77#define MP_EISCONN (106) // Transport endpoint is already connected
78#define MP_ENOTCONN (107) // Transport endpoint is not connected
79#define MP_ETIMEDOUT (110) // Connection timed out
80#define MP_ECONNREFUSED (111) // Connection refused
81#define MP_EHOSTUNREACH (113) // No route to host
82#define MP_EALREADY (114) // Operation already in progress
83#define MP_EINPROGRESS (115) // Operation now in progress
84
85#else
86
87// MP_Exxx errno's are defined in terms of system supplied ones
88
89#include <errno.h>
90
91#define MP_EPERM EPERM
92#define MP_ENOENT ENOENT
93#define MP_ESRCH ESRCH
94#define MP_EINTR EINTR
95#define MP_EIO EIO
96#define MP_ENXIO ENXIO
97#define MP_E2BIG E2BIG
98#define MP_ENOEXEC ENOEXEC
99#define MP_EBADF EBADF
100#define MP_ECHILD ECHILD
101#define MP_EAGAIN EAGAIN
102#define MP_ENOMEM ENOMEM
103#define MP_EACCES EACCES
104#define MP_EFAULT EFAULT
105#define MP_ENOTBLK ENOTBLK
106#define MP_EBUSY EBUSY
107#define MP_EEXIST EEXIST
108#define MP_EXDEV EXDEV
109#define MP_ENODEV ENODEV
110#define MP_ENOTDIR ENOTDIR
111#define MP_EISDIR EISDIR
112#define MP_EINVAL EINVAL
113#define MP_ENFILE ENFILE
114#define MP_EMFILE EMFILE
115#define MP_ENOTTY ENOTTY
116#define MP_ETXTBSY ETXTBSY
117#define MP_EFBIG EFBIG
118#define MP_ENOSPC ENOSPC
119#define MP_ESPIPE ESPIPE
120#define MP_EROFS EROFS
121#define MP_EMLINK EMLINK
122#define MP_EPIPE EPIPE
123#define MP_EDOM EDOM
124#define MP_ERANGE ERANGE
125#define MP_EWOULDBLOCK EWOULDBLOCK
126#define MP_EOPNOTSUPP EOPNOTSUPP
127#define MP_EAFNOSUPPORT EAFNOSUPPORT
128#define MP_EADDRINUSE EADDRINUSE
129#define MP_ECONNABORTED ECONNABORTED
130#define MP_ECONNRESET ECONNRESET
131#define MP_ENOBUFS ENOBUFS
132#define MP_EISCONN EISCONN
133#define MP_ENOTCONN ENOTCONN
134#define MP_ETIMEDOUT ETIMEDOUT
135#define MP_ECONNREFUSED ECONNREFUSED
136#define MP_EHOSTUNREACH EHOSTUNREACH
137#define MP_EALREADY EALREADY
138#define MP_EINPROGRESS EINPROGRESS
139
140#endif
141
142#if MICROPY_PY_UERRNO
143
144#include "py/obj.h"
145
146qstr mp_errno_to_str(mp_obj_t errno_val);
147
148#endif
149
150#endif // MICROPY_INCLUDED_PY_MPERRNO_H
151