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