1 /**
2 * Copyright (c) 2023-2024 Marcin Niestroj
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include "nsos_errno.h"
8
9 #ifndef ARRAY_SIZE
10 #define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
11 #endif
12
13 struct nsos_mid_errno_map {
14 /** Zephyr/host error code */
15 int err;
16 /** NSOS middleground error code */
17 int mid_err;
18 };
19
20 #define ERR(_name) \
21 { _name, NSOS_MID_ ## _name }
22
23 static const struct nsos_mid_errno_map map[] = {
24 ERR(EPERM),
25 ERR(ENOENT),
26 ERR(ESRCH),
27 ERR(EINTR),
28 ERR(EIO),
29 ERR(ENXIO),
30 ERR(E2BIG),
31 ERR(ENOEXEC),
32 ERR(EBADF),
33 ERR(ECHILD),
34 ERR(EAGAIN),
35 ERR(ENOMEM),
36 ERR(EACCES),
37 ERR(EFAULT),
38 ERR(ENOTBLK),
39 ERR(EBUSY),
40 ERR(EEXIST),
41 ERR(EXDEV),
42 ERR(ENODEV),
43 ERR(ENOTDIR),
44 ERR(EISDIR),
45 ERR(EINVAL),
46 ERR(ENFILE),
47 ERR(EMFILE),
48 ERR(ENOTTY),
49 ERR(ETXTBSY),
50 ERR(EFBIG),
51 ERR(ENOSPC),
52 ERR(ESPIPE),
53 ERR(EROFS),
54 ERR(EMLINK),
55 ERR(EPIPE),
56 ERR(EDOM),
57 ERR(ERANGE),
58 ERR(ENOMSG),
59 ERR(EDEADLK),
60 ERR(ENOLCK),
61 ERR(ENOSTR),
62 ERR(ENODATA),
63 ERR(ETIME),
64 ERR(ENOSR),
65 ERR(EPROTO),
66 ERR(EBADMSG),
67 ERR(ENOSYS),
68 ERR(ENOTEMPTY),
69 ERR(ENAMETOOLONG),
70 ERR(ELOOP),
71 ERR(EOPNOTSUPP),
72 ERR(EPFNOSUPPORT),
73 ERR(ECONNRESET),
74 ERR(ENOBUFS),
75 ERR(EAFNOSUPPORT),
76 ERR(EPROTOTYPE),
77 ERR(ENOTSOCK),
78 ERR(ENOPROTOOPT),
79 ERR(ESHUTDOWN),
80 ERR(ECONNREFUSED),
81 ERR(EADDRINUSE),
82 ERR(ECONNABORTED),
83 ERR(ENETUNREACH),
84 ERR(ENETDOWN),
85 ERR(ETIMEDOUT),
86 ERR(EHOSTDOWN),
87 ERR(EHOSTUNREACH),
88 ERR(EINPROGRESS),
89 ERR(EALREADY),
90 ERR(EDESTADDRREQ),
91 ERR(EMSGSIZE),
92 ERR(EPROTONOSUPPORT),
93 ERR(ESOCKTNOSUPPORT),
94 ERR(EADDRNOTAVAIL),
95 ERR(ENETRESET),
96 ERR(EISCONN),
97 ERR(ENOTCONN),
98 ERR(ETOOMANYREFS),
99 ERR(ENOTSUP),
100 ERR(EILSEQ),
101 ERR(EOVERFLOW),
102 ERR(ECANCELED),
103 };
104
errno_to_nsos_mid(int err)105 int errno_to_nsos_mid(int err)
106 {
107 for (int i = 0; i < ARRAY_SIZE(map); i++) {
108 if (map[i].err == err) {
109 return map[i].mid_err;
110 }
111 }
112
113 return err;
114 }
115
errno_from_nsos_mid(int err)116 int errno_from_nsos_mid(int err)
117 {
118 for (int i = 0; i < ARRAY_SIZE(map); i++) {
119 if (map[i].mid_err == err) {
120 return map[i].err;
121 }
122 }
123
124 return err;
125 }
126