Annotation of embedaddon/libiconv/srclib/strerror.c, revision 1.1.1.1
1.1 misho 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_ESTALE
317: case ESTALE:
318: msg = "Stale NFS file handle";
319: break;
320: # endif
321:
322: # if GNULIB_defined_ECANCELED
323: case ECANCELED:
324: msg = "Operation canceled";
325: break;
326: # endif
327: }
328:
329: if (msg)
330: return (char *) msg;
331:
332: {
333: char *result = strerror (n);
334:
335: if (result == NULL || result[0] == '\0')
336: {
337: static char const fmt[] = "Unknown error (%d)";
338: static char msg_buf[sizeof fmt + INT_STRLEN_BOUND (n)];
339: sprintf (msg_buf, fmt, n);
340: return msg_buf;
341: }
342:
343: return result;
344: }
345: }
346:
347: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>