Mercurial > hg-old > index.cgi
comparison lib/strerror.c @ 265:68fbca173508 2.6
Added generated files for release
author | lost |
---|---|
date | Tue, 22 Dec 2009 05:31:23 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
264:61d1db1dfe2a | 265:68fbca173508 |
---|---|
1 /* strerror.c --- POSIX compatible system error routine | |
2 | |
3 Copyright (C) 2007-2009 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 #include <config.h> | |
19 | |
20 #include <string.h> | |
21 | |
22 #if REPLACE_STRERROR | |
23 | |
24 # include <errno.h> | |
25 # include <stdio.h> | |
26 | |
27 # if GNULIB_defined_ESOCK /* native Windows platforms */ | |
28 # if HAVE_WINSOCK2_H | |
29 # include <winsock2.h> | |
30 # endif | |
31 # endif | |
32 | |
33 # include "intprops.h" | |
34 | |
35 # undef strerror | |
36 # if ! HAVE_DECL_STRERROR | |
37 # define strerror(n) NULL | |
38 # endif | |
39 | |
40 char * | |
41 rpl_strerror (int n) | |
42 { | |
43 char const *msg = NULL; | |
44 /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ | |
45 switch (n) | |
46 { | |
47 # if GNULIB_defined_ETXTBSY | |
48 case ETXTBSY: | |
49 msg = "Text file busy"; | |
50 break; | |
51 # endif | |
52 | |
53 # if GNULIB_defined_ESOCK /* native Windows platforms */ | |
54 /* EWOULDBLOCK is the same as EAGAIN. */ | |
55 case EINPROGRESS: | |
56 msg = "Operation now in progress"; | |
57 break; | |
58 case EALREADY: | |
59 msg = "Operation already in progress"; | |
60 break; | |
61 case ENOTSOCK: | |
62 msg = "Socket operation on non-socket"; | |
63 break; | |
64 case EDESTADDRREQ: | |
65 msg = "Destination address required"; | |
66 break; | |
67 case EMSGSIZE: | |
68 msg = "Message too long"; | |
69 break; | |
70 case EPROTOTYPE: | |
71 msg = "Protocol wrong type for socket"; | |
72 break; | |
73 case ENOPROTOOPT: | |
74 msg = "Protocol not available"; | |
75 break; | |
76 case EPROTONOSUPPORT: | |
77 msg = "Protocol not supported"; | |
78 break; | |
79 case ESOCKTNOSUPPORT: | |
80 msg = "Socket type not supported"; | |
81 break; | |
82 case EOPNOTSUPP: | |
83 msg = "Operation not supported"; | |
84 break; | |
85 case EPFNOSUPPORT: | |
86 msg = "Protocol family not supported"; | |
87 break; | |
88 case EAFNOSUPPORT: | |
89 msg = "Address family not supported by protocol"; | |
90 break; | |
91 case EADDRINUSE: | |
92 msg = "Address already in use"; | |
93 break; | |
94 case EADDRNOTAVAIL: | |
95 msg = "Cannot assign requested address"; | |
96 break; | |
97 case ENETDOWN: | |
98 msg = "Network is down"; | |
99 break; | |
100 case ENETUNREACH: | |
101 msg = "Network is unreachable"; | |
102 break; | |
103 case ENETRESET: | |
104 msg = "Network dropped connection on reset"; | |
105 break; | |
106 case ECONNABORTED: | |
107 msg = "Software caused connection abort"; | |
108 break; | |
109 case ECONNRESET: | |
110 msg = "Connection reset by peer"; | |
111 break; | |
112 case ENOBUFS: | |
113 msg = "No buffer space available"; | |
114 break; | |
115 case EISCONN: | |
116 msg = "Transport endpoint is already connected"; | |
117 break; | |
118 case ENOTCONN: | |
119 msg = "Transport endpoint is not connected"; | |
120 break; | |
121 case ESHUTDOWN: | |
122 msg = "Cannot send after transport endpoint shutdown"; | |
123 break; | |
124 case ETOOMANYREFS: | |
125 msg = "Too many references: cannot splice"; | |
126 break; | |
127 case ETIMEDOUT: | |
128 msg = "Connection timed out"; | |
129 break; | |
130 case ECONNREFUSED: | |
131 msg = "Connection refused"; | |
132 break; | |
133 case ELOOP: | |
134 msg = "Too many levels of symbolic links"; | |
135 break; | |
136 case EHOSTDOWN: | |
137 msg = "Host is down"; | |
138 break; | |
139 case EHOSTUNREACH: | |
140 msg = "No route to host"; | |
141 break; | |
142 case EPROCLIM: | |
143 msg = "Too many processes"; | |
144 break; | |
145 case EUSERS: | |
146 msg = "Too many users"; | |
147 break; | |
148 case EDQUOT: | |
149 msg = "Disk quota exceeded"; | |
150 break; | |
151 case ESTALE: | |
152 msg = "Stale NFS file handle"; | |
153 break; | |
154 case EREMOTE: | |
155 msg = "Object is remote"; | |
156 break; | |
157 # if HAVE_WINSOCK2_H | |
158 /* WSA_INVALID_HANDLE maps to EBADF */ | |
159 /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ | |
160 /* WSA_INVALID_PARAMETER maps to EINVAL */ | |
161 case WSA_OPERATION_ABORTED: | |
162 msg = "Overlapped operation aborted"; | |
163 break; | |
164 case WSA_IO_INCOMPLETE: | |
165 msg = "Overlapped I/O event object not in signaled state"; | |
166 break; | |
167 case WSA_IO_PENDING: | |
168 msg = "Overlapped operations will complete later"; | |
169 break; | |
170 /* WSAEINTR maps to EINTR */ | |
171 /* WSAEBADF maps to EBADF */ | |
172 /* WSAEACCES maps to EACCES */ | |
173 /* WSAEFAULT maps to EFAULT */ | |
174 /* WSAEINVAL maps to EINVAL */ | |
175 /* WSAEMFILE maps to EMFILE */ | |
176 /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ | |
177 /* WSAEINPROGRESS is EINPROGRESS */ | |
178 /* WSAEALREADY is EALREADY */ | |
179 /* WSAENOTSOCK is ENOTSOCK */ | |
180 /* WSAEDESTADDRREQ is EDESTADDRREQ */ | |
181 /* WSAEMSGSIZE is EMSGSIZE */ | |
182 /* WSAEPROTOTYPE is EPROTOTYPE */ | |
183 /* WSAENOPROTOOPT is ENOPROTOOPT */ | |
184 /* WSAEPROTONOSUPPORT is EPROTONOSUPPORT */ | |
185 /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ | |
186 /* WSAEOPNOTSUPP is EOPNOTSUPP */ | |
187 /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ | |
188 /* WSAEAFNOSUPPORT is EAFNOSUPPORT */ | |
189 /* WSAEADDRINUSE is EADDRINUSE */ | |
190 /* WSAEADDRNOTAVAIL is EADDRNOTAVAIL */ | |
191 /* WSAENETDOWN is ENETDOWN */ | |
192 /* WSAENETUNREACH is ENETUNREACH */ | |
193 /* WSAENETRESET is ENETRESET */ | |
194 /* WSAECONNABORTED is ECONNABORTED */ | |
195 /* WSAECONNRESET is ECONNRESET */ | |
196 /* WSAENOBUFS is ENOBUFS */ | |
197 /* WSAEISCONN is EISCONN */ | |
198 /* WSAENOTCONN is ENOTCONN */ | |
199 /* WSAESHUTDOWN is ESHUTDOWN */ | |
200 /* WSAETOOMANYREFS is ETOOMANYREFS */ | |
201 /* WSAETIMEDOUT is ETIMEDOUT */ | |
202 /* WSAECONNREFUSED is ECONNREFUSED */ | |
203 /* WSAELOOP is ELOOP */ | |
204 /* WSAENAMETOOLONG maps to ENAMETOOLONG */ | |
205 /* WSAEHOSTDOWN is EHOSTDOWN */ | |
206 /* WSAEHOSTUNREACH is EHOSTUNREACH */ | |
207 /* WSAENOTEMPTY maps to ENOTEMPTY */ | |
208 /* WSAEPROCLIM is EPROCLIM */ | |
209 /* WSAEUSERS is EUSERS */ | |
210 /* WSAEDQUOT is EDQUOT */ | |
211 /* WSAESTALE is ESTALE */ | |
212 /* WSAEREMOTE is EREMOTE */ | |
213 case WSASYSNOTREADY: | |
214 msg = "Network subsystem is unavailable"; | |
215 break; | |
216 case WSAVERNOTSUPPORTED: | |
217 msg = "Winsock.dll version out of range"; | |
218 break; | |
219 case WSANOTINITIALISED: | |
220 msg = "Successful WSAStartup not yet performed"; | |
221 break; | |
222 case WSAEDISCON: | |
223 msg = "Graceful shutdown in progress"; | |
224 break; | |
225 case WSAENOMORE: case WSA_E_NO_MORE: | |
226 msg = "No more results"; | |
227 break; | |
228 case WSAECANCELLED: case WSA_E_CANCELLED: | |
229 msg = "Call was canceled"; | |
230 break; | |
231 case WSAEINVALIDPROCTABLE: | |
232 msg = "Procedure call table is invalid"; | |
233 break; | |
234 case WSAEINVALIDPROVIDER: | |
235 msg = "Service provider is invalid"; | |
236 break; | |
237 case WSAEPROVIDERFAILEDINIT: | |
238 msg = "Service provider failed to initialize"; | |
239 break; | |
240 case WSASYSCALLFAILURE: | |
241 msg = "System call failure"; | |
242 break; | |
243 case WSASERVICE_NOT_FOUND: | |
244 msg = "Service not found"; | |
245 break; | |
246 case WSATYPE_NOT_FOUND: | |
247 msg = "Class type not found"; | |
248 break; | |
249 case WSAEREFUSED: | |
250 msg = "Database query was refused"; | |
251 break; | |
252 case WSAHOST_NOT_FOUND: | |
253 msg = "Host not found"; | |
254 break; | |
255 case WSATRY_AGAIN: | |
256 msg = "Nonauthoritative host not found"; | |
257 break; | |
258 case WSANO_RECOVERY: | |
259 msg = "Nonrecoverable error"; | |
260 break; | |
261 case WSANO_DATA: | |
262 msg = "Valid name, no data record of requested type"; | |
263 break; | |
264 /* WSA_QOS_* omitted */ | |
265 # endif | |
266 # endif | |
267 | |
268 # if GNULIB_defined_ENOMSG | |
269 case ENOMSG: | |
270 msg = "No message of desired type"; | |
271 break; | |
272 # endif | |
273 | |
274 # if GNULIB_defined_EIDRM | |
275 case EIDRM: | |
276 msg = "Identifier removed"; | |
277 break; | |
278 # endif | |
279 | |
280 # if GNULIB_defined_ENOLINK | |
281 case ENOLINK: | |
282 msg = "Link has been severed"; | |
283 break; | |
284 # endif | |
285 | |
286 # if GNULIB_defined_EPROTO | |
287 case EPROTO: | |
288 msg = "Protocol error"; | |
289 break; | |
290 # endif | |
291 | |
292 # if GNULIB_defined_EMULTIHOP | |
293 case EMULTIHOP: | |
294 msg = "Multihop attempted"; | |
295 break; | |
296 # endif | |
297 | |
298 # if GNULIB_defined_EBADMSG | |
299 case EBADMSG: | |
300 msg = "Bad message"; | |
301 break; | |
302 # endif | |
303 | |
304 # if GNULIB_defined_EOVERFLOW | |
305 case EOVERFLOW: | |
306 msg = "Value too large for defined data type"; | |
307 break; | |
308 # endif | |
309 | |
310 # if GNULIB_defined_ENOTSUP | |
311 case ENOTSUP: | |
312 msg = "Not supported"; | |
313 break; | |
314 # endif | |
315 | |
316 # if GNULIB_defined_ | |
317 case ECANCELED: | |
318 msg = "Operation canceled"; | |
319 break; | |
320 # endif | |
321 } | |
322 | |
323 if (msg) | |
324 return (char *) msg; | |
325 | |
326 { | |
327 char *result = strerror (n); | |
328 | |
329 if (result == NULL || result[0] == '\0') | |
330 { | |
331 static char const fmt[] = "Unknown error (%d)"; | |
332 static char msg_buf[sizeof fmt + INT_STRLEN_BOUND (n)]; | |
333 sprintf (msg_buf, fmt, n); | |
334 return msg_buf; | |
335 } | |
336 | |
337 return result; | |
338 } | |
339 } | |
340 | |
341 #endif |