diff options
Diffstat (limited to 'gl/strerror-override.c')
-rw-r--r-- | gl/strerror-override.c | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/gl/strerror-override.c b/gl/strerror-override.c new file mode 100644 index 00000000..d0ed2fb8 --- /dev/null +++ b/gl/strerror-override.c | |||
@@ -0,0 +1,302 @@ | |||
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 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 | ||
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 | } | ||