Annotation of embedaddon/libiconv/srclib/strerror.c, revision 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>