1 | /* strerror-override.c --- POSIX compatible system error routine
|
---|
2 |
|
---|
3 | Copyright (C) 2010-2021 Free Software Foundation, Inc.
|
---|
4 |
|
---|
5 | This file is free software: you can redistribute it and/or modify
|
---|
6 | it under the terms of the GNU Lesser General Public License as
|
---|
7 | published by the Free Software Foundation; either version 2.1 of the
|
---|
8 | License, or (at your option) any later version.
|
---|
9 |
|
---|
10 | This file is distributed in the hope that it will be useful,
|
---|
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
13 | GNU Lesser General Public License for more details.
|
---|
14 |
|
---|
15 | You should have received a copy of the GNU Lesser General Public License
|
---|
16 | along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
---|
17 |
|
---|
18 | /* Written by Bruno Haible <[email protected]>, 2010. */
|
---|
19 |
|
---|
20 | #include <config.h>
|
---|
21 |
|
---|
22 | #include "strerror-override.h"
|
---|
23 |
|
---|
24 | #include <errno.h>
|
---|
25 |
|
---|
26 | #if GNULIB_defined_EWINSOCK /* native Windows platforms */
|
---|
27 | # if HAVE_WINSOCK2_H
|
---|
28 | # include <winsock2.h>
|
---|
29 | # endif
|
---|
30 | #endif
|
---|
31 |
|
---|
32 | #if !GNULIB_defined_strerror_override_macro
|
---|
33 |
|
---|
34 | /* If ERRNUM maps to an errno value defined by gnulib, return a string
|
---|
35 | describing the error. Otherwise return NULL. */
|
---|
36 | const char *
|
---|
37 | strerror_override (int errnum)
|
---|
38 | {
|
---|
39 | /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */
|
---|
40 | switch (errnum)
|
---|
41 | {
|
---|
42 | # if REPLACE_STRERROR_0
|
---|
43 | case 0:
|
---|
44 | return "Success";
|
---|
45 | # endif
|
---|
46 |
|
---|
47 | # if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */
|
---|
48 | case EINPROGRESS:
|
---|
49 | return "Operation now in progress";
|
---|
50 | case EALREADY:
|
---|
51 | return "Operation already in progress";
|
---|
52 | case ENOTSOCK:
|
---|
53 | return "Socket operation on non-socket";
|
---|
54 | case EDESTADDRREQ:
|
---|
55 | return "Destination address required";
|
---|
56 | case EMSGSIZE:
|
---|
57 | return "Message too long";
|
---|
58 | case EPROTOTYPE:
|
---|
59 | return "Protocol wrong type for socket";
|
---|
60 | case ENOPROTOOPT:
|
---|
61 | return "Protocol not available";
|
---|
62 | case EPROTONOSUPPORT:
|
---|
63 | return "Protocol not supported";
|
---|
64 | case EOPNOTSUPP:
|
---|
65 | return "Operation not supported";
|
---|
66 | case EAFNOSUPPORT:
|
---|
67 | return "Address family not supported by protocol";
|
---|
68 | case EADDRINUSE:
|
---|
69 | return "Address already in use";
|
---|
70 | case EADDRNOTAVAIL:
|
---|
71 | return "Cannot assign requested address";
|
---|
72 | case ENETDOWN:
|
---|
73 | return "Network is down";
|
---|
74 | case ENETUNREACH:
|
---|
75 | return "Network is unreachable";
|
---|
76 | case ECONNRESET:
|
---|
77 | return "Connection reset by peer";
|
---|
78 | case ENOBUFS:
|
---|
79 | return "No buffer space available";
|
---|
80 | case EISCONN:
|
---|
81 | return "Transport endpoint is already connected";
|
---|
82 | case ENOTCONN:
|
---|
83 | return "Transport endpoint is not connected";
|
---|
84 | case ETIMEDOUT:
|
---|
85 | return "Connection timed out";
|
---|
86 | case ECONNREFUSED:
|
---|
87 | return "Connection refused";
|
---|
88 | case ELOOP:
|
---|
89 | return "Too many levels of symbolic links";
|
---|
90 | case EHOSTUNREACH:
|
---|
91 | return "No route to host";
|
---|
92 | case EWOULDBLOCK:
|
---|
93 | return "Operation would block";
|
---|
94 | # endif
|
---|
95 | # if GNULIB_defined_ESTREAMS /* native Windows platforms with older <errno.h> */
|
---|
96 | case ETXTBSY:
|
---|
97 | return "Text file busy";
|
---|
98 | case ENODATA:
|
---|
99 | return "No data available";
|
---|
100 | case ENOSR:
|
---|
101 | return "Out of streams resources";
|
---|
102 | case ENOSTR:
|
---|
103 | return "Device not a stream";
|
---|
104 | case ETIME:
|
---|
105 | return "Timer expired";
|
---|
106 | case EOTHER:
|
---|
107 | return "Other error";
|
---|
108 | # endif
|
---|
109 | # if GNULIB_defined_EWINSOCK /* native Windows platforms */
|
---|
110 | case ESOCKTNOSUPPORT:
|
---|
111 | return "Socket type not supported";
|
---|
112 | case EPFNOSUPPORT:
|
---|
113 | return "Protocol family not supported";
|
---|
114 | case ESHUTDOWN:
|
---|
115 | return "Cannot send after transport endpoint shutdown";
|
---|
116 | case ETOOMANYREFS:
|
---|
117 | return "Too many references: cannot splice";
|
---|
118 | case EHOSTDOWN:
|
---|
119 | return "Host is down";
|
---|
120 | case EPROCLIM:
|
---|
121 | return "Too many processes";
|
---|
122 | case EUSERS:
|
---|
123 | return "Too many users";
|
---|
124 | case EDQUOT:
|
---|
125 | return "Disk quota exceeded";
|
---|
126 | case ESTALE:
|
---|
127 | return "Stale NFS file handle";
|
---|
128 | case EREMOTE:
|
---|
129 | return "Object is remote";
|
---|
130 | # if HAVE_WINSOCK2_H
|
---|
131 | /* WSA_INVALID_HANDLE maps to EBADF */
|
---|
132 | /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */
|
---|
133 | /* WSA_INVALID_PARAMETER maps to EINVAL */
|
---|
134 | case WSA_OPERATION_ABORTED:
|
---|
135 | return "Overlapped operation aborted";
|
---|
136 | case WSA_IO_INCOMPLETE:
|
---|
137 | return "Overlapped I/O event object not in signaled state";
|
---|
138 | case WSA_IO_PENDING:
|
---|
139 | return "Overlapped operations will complete later";
|
---|
140 | /* WSAEINTR maps to EINTR */
|
---|
141 | /* WSAEBADF maps to EBADF */
|
---|
142 | /* WSAEACCES maps to EACCES */
|
---|
143 | /* WSAEFAULT maps to EFAULT */
|
---|
144 | /* WSAEINVAL maps to EINVAL */
|
---|
145 | /* WSAEMFILE maps to EMFILE */
|
---|
146 | /* WSAEWOULDBLOCK maps to EWOULDBLOCK */
|
---|
147 | /* WSAEINPROGRESS maps to EINPROGRESS */
|
---|
148 | /* WSAEALREADY maps to EALREADY */
|
---|
149 | /* WSAENOTSOCK maps to ENOTSOCK */
|
---|
150 | /* WSAEDESTADDRREQ maps to EDESTADDRREQ */
|
---|
151 | /* WSAEMSGSIZE maps to EMSGSIZE */
|
---|
152 | /* WSAEPROTOTYPE maps to EPROTOTYPE */
|
---|
153 | /* WSAENOPROTOOPT maps to ENOPROTOOPT */
|
---|
154 | /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */
|
---|
155 | /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */
|
---|
156 | /* WSAEOPNOTSUPP maps to EOPNOTSUPP */
|
---|
157 | /* WSAEPFNOSUPPORT is EPFNOSUPPORT */
|
---|
158 | /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */
|
---|
159 | /* WSAEADDRINUSE maps to EADDRINUSE */
|
---|
160 | /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */
|
---|
161 | /* WSAENETDOWN maps to ENETDOWN */
|
---|
162 | /* WSAENETUNREACH maps to ENETUNREACH */
|
---|
163 | /* WSAENETRESET maps to ENETRESET */
|
---|
164 | /* WSAECONNABORTED maps to ECONNABORTED */
|
---|
165 | /* WSAECONNRESET maps to ECONNRESET */
|
---|
166 | /* WSAENOBUFS maps to ENOBUFS */
|
---|
167 | /* WSAEISCONN maps to EISCONN */
|
---|
168 | /* WSAENOTCONN maps to ENOTCONN */
|
---|
169 | /* WSAESHUTDOWN is ESHUTDOWN */
|
---|
170 | /* WSAETOOMANYREFS is ETOOMANYREFS */
|
---|
171 | /* WSAETIMEDOUT maps to ETIMEDOUT */
|
---|
172 | /* WSAECONNREFUSED maps to ECONNREFUSED */
|
---|
173 | /* WSAELOOP maps to ELOOP */
|
---|
174 | /* WSAENAMETOOLONG maps to ENAMETOOLONG */
|
---|
175 | /* WSAEHOSTDOWN is EHOSTDOWN */
|
---|
176 | /* WSAEHOSTUNREACH maps to EHOSTUNREACH */
|
---|
177 | /* WSAENOTEMPTY maps to ENOTEMPTY */
|
---|
178 | /* WSAEPROCLIM is EPROCLIM */
|
---|
179 | /* WSAEUSERS is EUSERS */
|
---|
180 | /* WSAEDQUOT is EDQUOT */
|
---|
181 | /* WSAESTALE is ESTALE */
|
---|
182 | /* WSAEREMOTE is EREMOTE */
|
---|
183 | case WSASYSNOTREADY:
|
---|
184 | return "Network subsystem is unavailable";
|
---|
185 | case WSAVERNOTSUPPORTED:
|
---|
186 | return "Winsock.dll version out of range";
|
---|
187 | case WSANOTINITIALISED:
|
---|
188 | return "Successful WSAStartup not yet performed";
|
---|
189 | case WSAEDISCON:
|
---|
190 | return "Graceful shutdown in progress";
|
---|
191 | case WSAENOMORE: case WSA_E_NO_MORE:
|
---|
192 | return "No more results";
|
---|
193 | case WSAECANCELLED: case WSA_E_CANCELLED:
|
---|
194 | return "Call was canceled";
|
---|
195 | case WSAEINVALIDPROCTABLE:
|
---|
196 | return "Procedure call table is invalid";
|
---|
197 | case WSAEINVALIDPROVIDER:
|
---|
198 | return "Service provider is invalid";
|
---|
199 | case WSAEPROVIDERFAILEDINIT:
|
---|
200 | return "Service provider failed to initialize";
|
---|
201 | case WSASYSCALLFAILURE:
|
---|
202 | return "System call failure";
|
---|
203 | case WSASERVICE_NOT_FOUND:
|
---|
204 | return "Service not found";
|
---|
205 | case WSATYPE_NOT_FOUND:
|
---|
206 | return "Class type not found";
|
---|
207 | case WSAEREFUSED:
|
---|
208 | return "Database query was refused";
|
---|
209 | case WSAHOST_NOT_FOUND:
|
---|
210 | return "Host not found";
|
---|
211 | case WSATRY_AGAIN:
|
---|
212 | return "Nonauthoritative host not found";
|
---|
213 | case WSANO_RECOVERY:
|
---|
214 | return "Nonrecoverable error";
|
---|
215 | case WSANO_DATA:
|
---|
216 | return "Valid name, no data record of requested type";
|
---|
217 | /* WSA_QOS_* omitted */
|
---|
218 | # endif
|
---|
219 | # endif
|
---|
220 |
|
---|
221 | # if GNULIB_defined_ENOMSG
|
---|
222 | case ENOMSG:
|
---|
223 | return "No message of desired type";
|
---|
224 | # endif
|
---|
225 |
|
---|
226 | # if GNULIB_defined_EIDRM
|
---|
227 | case EIDRM:
|
---|
228 | return "Identifier removed";
|
---|
229 | # endif
|
---|
230 |
|
---|
231 | # if GNULIB_defined_ENOLINK
|
---|
232 | case ENOLINK:
|
---|
233 | return "Link has been severed";
|
---|
234 | # endif
|
---|
235 |
|
---|
236 | # if GNULIB_defined_EPROTO
|
---|
237 | case EPROTO:
|
---|
238 | return "Protocol error";
|
---|
239 | # endif
|
---|
240 |
|
---|
241 | # if GNULIB_defined_EMULTIHOP
|
---|
242 | case EMULTIHOP:
|
---|
243 | return "Multihop attempted";
|
---|
244 | # endif
|
---|
245 |
|
---|
246 | # if GNULIB_defined_EBADMSG
|
---|
247 | case EBADMSG:
|
---|
248 | return "Bad message";
|
---|
249 | # endif
|
---|
250 |
|
---|
251 | # if GNULIB_defined_EOVERFLOW
|
---|
252 | case EOVERFLOW:
|
---|
253 | return "Value too large for defined data type";
|
---|
254 | # endif
|
---|
255 |
|
---|
256 | # if GNULIB_defined_ENOTSUP
|
---|
257 | case ENOTSUP:
|
---|
258 | return "Not supported";
|
---|
259 | # endif
|
---|
260 |
|
---|
261 | # if GNULIB_defined_ENETRESET
|
---|
262 | case ENETRESET:
|
---|
263 | return "Network dropped connection on reset";
|
---|
264 | # endif
|
---|
265 |
|
---|
266 | # if GNULIB_defined_ECONNABORTED
|
---|
267 | case ECONNABORTED:
|
---|
268 | return "Software caused connection abort";
|
---|
269 | # endif
|
---|
270 |
|
---|
271 | # if GNULIB_defined_ESTALE
|
---|
272 | case ESTALE:
|
---|
273 | return "Stale NFS file handle";
|
---|
274 | # endif
|
---|
275 |
|
---|
276 | # if GNULIB_defined_EDQUOT
|
---|
277 | case EDQUOT:
|
---|
278 | return "Disk quota exceeded";
|
---|
279 | # endif
|
---|
280 |
|
---|
281 | # if GNULIB_defined_ECANCELED
|
---|
282 | case ECANCELED:
|
---|
283 | return "Operation canceled";
|
---|
284 | # endif
|
---|
285 |
|
---|
286 | # if GNULIB_defined_EOWNERDEAD
|
---|
287 | case EOWNERDEAD:
|
---|
288 | return "Owner died";
|
---|
289 | # endif
|
---|
290 |
|
---|
291 | # if GNULIB_defined_ENOTRECOVERABLE
|
---|
292 | case ENOTRECOVERABLE:
|
---|
293 | return "State not recoverable";
|
---|
294 | # endif
|
---|
295 |
|
---|
296 | # if GNULIB_defined_EILSEQ
|
---|
297 | case EILSEQ:
|
---|
298 | return "Invalid or incomplete multibyte or wide character";
|
---|
299 | # endif
|
---|
300 |
|
---|
301 | default:
|
---|
302 | return NULL;
|
---|
303 | }
|
---|
304 | }
|
---|
305 |
|
---|
306 | #endif
|
---|