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