Line 0
Link Here
|
|
|
1 |
/* strerror-override.c --- POSIX compatible system error routine |
2 |
|
3 |
Copyright (C) 2010-2013 Free Software Foundation, Inc. |
4 |
|
5 |
This program is free software: you can redistribute it and/or modify |
6 |
it under the terms of the GNU Lesser General Public License as published by |
7 |
the Free Software Foundation; either version 2.1 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 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 <http://www.gnu.org/licenses/>. */ |
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 |
} |