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 {0, 0},
22 ERR(EPERM),
23 ERR(ENOENT),
24 ERR(ESRCH),
25 ERR(EINTR),
26 ERR(EIO),
27 ERR(ENXIO),
28 ERR(E2BIG),
29 ERR(ENOEXEC),
30 ERR(EBADF),
31 ERR(ECHILD),
32 ERR(EAGAIN),
33 ERR(ENOMEM),
34 ERR(EACCES),
35 ERR(EFAULT),
36 ERR(ENOTBLK),
37 ERR(EBUSY),
38 ERR(EEXIST),
39 ERR(EXDEV),
40 ERR(ENODEV),
41 ERR(ENOTDIR),
42 ERR(EISDIR),
43 ERR(EINVAL),
44 ERR(ENFILE),
45 ERR(EMFILE),
46 ERR(ENOTTY),
47 ERR(ETXTBSY),
48 ERR(EFBIG),
49 ERR(ENOSPC),
50 ERR(ESPIPE),
51 ERR(EROFS),
52 ERR(EMLINK),
53 ERR(EPIPE),
54 ERR(EDOM),
55 ERR(ERANGE),
56 ERR(ENOMSG),
57 ERR(EDEADLK),
58 ERR(ENOLCK),
59 ERR(ENOSTR),
60 ERR(ENODATA),
61 ERR(ETIME),
62 ERR(ENOSR),
63 ERR(EPROTO),
64 ERR(EBADMSG),
65 ERR(ENOSYS),
66 ERR(ENOTEMPTY),
67 ERR(ENAMETOOLONG),
68 ERR(ELOOP),
69 ERR(EOPNOTSUPP),
70 ERR(EPFNOSUPPORT),
71 ERR(ECONNRESET),
72 ERR(ENOBUFS),
73 ERR(EAFNOSUPPORT),
74 ERR(EPROTOTYPE),
75 ERR(ENOTSOCK),
76 ERR(ENOPROTOOPT),
77 ERR(ESHUTDOWN),
78 ERR(ECONNREFUSED),
79 ERR(EADDRINUSE),
80 ERR(ECONNABORTED),
81 ERR(ENETUNREACH),
82 ERR(ENETDOWN),
83 ERR(ETIMEDOUT),
84 ERR(EHOSTDOWN),
85 ERR(EHOSTUNREACH),
86 ERR(EINPROGRESS),
87 ERR(EALREADY),
88 ERR(EDESTADDRREQ),
89 ERR(EMSGSIZE),
90 ERR(EPROTONOSUPPORT),
91 ERR(ESOCKTNOSUPPORT),
92 ERR(EADDRNOTAVAIL),
93 ERR(ENETRESET),
94 ERR(EISCONN),
95 ERR(ENOTCONN),
96 ERR(ETOOMANYREFS),
97 ERR(ENOTSUP),
98 ERR(EILSEQ),
99 ERR(EOVERFLOW),
100 ERR(ECANCELED),
101 };
102
nsi_errno_to_mid(int err)103 int nsi_errno_to_mid(int err)
104 {
105 for (int i = 0; i < NSI_ARRAY_SIZE(map); i++) {
106 if (map[i].err == err) {
107 return map[i].mid_err;
108 }
109 }
110
111 return err;
112 }
113
nsi_errno_from_mid(int err)114 int nsi_errno_from_mid(int err)
115 {
116 for (int i = 0; i < NSI_ARRAY_SIZE(map); i++) {
117 if (map[i].mid_err == err) {
118 return map[i].err;
119 }
120 }
121
122 return err;
123 }
124
125 #if defined(NSI_RUNNER_BUILD)
nsi_get_errno_in_mid(void)126 int nsi_get_errno_in_mid(void)
127 {
128 return nsi_errno_to_mid(errno);
129 }
130 #endif
131
nsi_host_get_errno(void)132 int nsi_host_get_errno(void)
133 {
134 return nsi_errno_from_mid(nsi_get_errno_in_mid());
135 }
136