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