123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- /* strerror-override.c --- POSIX compatible system error routine
- Copyright (C) 2010-2013 Free Software Foundation, Inc.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
- /* Written by Bruno Haible <bruno@clisp.org>, 2010. */
- #include <config.h>
- #include "strerror-override.h"
- #include <errno.h>
- #if GNULIB_defined_EWINSOCK /* native Windows platforms */
- # if HAVE_WINSOCK2_H
- # include <winsock2.h>
- # endif
- #endif
- /* If ERRNUM maps to an errno value defined by gnulib, return a string
- describing the error. Otherwise return NULL. */
- const char *
- strerror_override (int errnum)
- {
- /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */
- switch (errnum)
- {
- #if REPLACE_STRERROR_0
- case 0:
- return "Success";
- #endif
- #if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */
- case EINPROGRESS:
- return "Operation now in progress";
- case EALREADY:
- return "Operation already in progress";
- case ENOTSOCK:
- return "Socket operation on non-socket";
- case EDESTADDRREQ:
- return "Destination address required";
- case EMSGSIZE:
- return "Message too long";
- case EPROTOTYPE:
- return "Protocol wrong type for socket";
- case ENOPROTOOPT:
- return "Protocol not available";
- case EPROTONOSUPPORT:
- return "Protocol not supported";
- case EOPNOTSUPP:
- return "Operation not supported";
- case EAFNOSUPPORT:
- return "Address family not supported by protocol";
- case EADDRINUSE:
- return "Address already in use";
- case EADDRNOTAVAIL:
- return "Cannot assign requested address";
- case ENETDOWN:
- return "Network is down";
- case ENETUNREACH:
- return "Network is unreachable";
- case ECONNRESET:
- return "Connection reset by peer";
- case ENOBUFS:
- return "No buffer space available";
- case EISCONN:
- return "Transport endpoint is already connected";
- case ENOTCONN:
- return "Transport endpoint is not connected";
- case ETIMEDOUT:
- return "Connection timed out";
- case ECONNREFUSED:
- return "Connection refused";
- case ELOOP:
- return "Too many levels of symbolic links";
- case EHOSTUNREACH:
- return "No route to host";
- case EWOULDBLOCK:
- return "Operation would block";
- #endif
- #if GNULIB_defined_ESTREAMS /* native Windows platforms with older <errno.h> */
- case ETXTBSY:
- return "Text file busy";
- case ENODATA:
- return "No data available";
- case ENOSR:
- return "Out of streams resources";
- case ENOSTR:
- return "Device not a stream";
- case ETIME:
- return "Timer expired";
- case EOTHER:
- return "Other error";
- #endif
- #if GNULIB_defined_EWINSOCK /* native Windows platforms */
- case ESOCKTNOSUPPORT:
- return "Socket type not supported";
- case EPFNOSUPPORT:
- return "Protocol family not supported";
- case ESHUTDOWN:
- return "Cannot send after transport endpoint shutdown";
- case ETOOMANYREFS:
- return "Too many references: cannot splice";
- case EHOSTDOWN:
- return "Host is down";
- case EPROCLIM:
- return "Too many processes";
- case EUSERS:
- return "Too many users";
- case EDQUOT:
- return "Disk quota exceeded";
- case ESTALE:
- return "Stale NFS file handle";
- case EREMOTE:
- return "Object is remote";
- # if HAVE_WINSOCK2_H
- /* WSA_INVALID_HANDLE maps to EBADF */
- /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */
- /* WSA_INVALID_PARAMETER maps to EINVAL */
- case WSA_OPERATION_ABORTED:
- return "Overlapped operation aborted";
- case WSA_IO_INCOMPLETE:
- return "Overlapped I/O event object not in signaled state";
- case WSA_IO_PENDING:
- return "Overlapped operations will complete later";
- /* WSAEINTR maps to EINTR */
- /* WSAEBADF maps to EBADF */
- /* WSAEACCES maps to EACCES */
- /* WSAEFAULT maps to EFAULT */
- /* WSAEINVAL maps to EINVAL */
- /* WSAEMFILE maps to EMFILE */
- /* WSAEWOULDBLOCK maps to EWOULDBLOCK */
- /* WSAEINPROGRESS maps to EINPROGRESS */
- /* WSAEALREADY maps to EALREADY */
- /* WSAENOTSOCK maps to ENOTSOCK */
- /* WSAEDESTADDRREQ maps to EDESTADDRREQ */
- /* WSAEMSGSIZE maps to EMSGSIZE */
- /* WSAEPROTOTYPE maps to EPROTOTYPE */
- /* WSAENOPROTOOPT maps to ENOPROTOOPT */
- /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */
- /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */
- /* WSAEOPNOTSUPP maps to EOPNOTSUPP */
- /* WSAEPFNOSUPPORT is EPFNOSUPPORT */
- /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */
- /* WSAEADDRINUSE maps to EADDRINUSE */
- /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */
- /* WSAENETDOWN maps to ENETDOWN */
- /* WSAENETUNREACH maps to ENETUNREACH */
- /* WSAENETRESET maps to ENETRESET */
- /* WSAECONNABORTED maps to ECONNABORTED */
- /* WSAECONNRESET maps to ECONNRESET */
- /* WSAENOBUFS maps to ENOBUFS */
- /* WSAEISCONN maps to EISCONN */
- /* WSAENOTCONN maps to ENOTCONN */
- /* WSAESHUTDOWN is ESHUTDOWN */
- /* WSAETOOMANYREFS is ETOOMANYREFS */
- /* WSAETIMEDOUT maps to ETIMEDOUT */
- /* WSAECONNREFUSED maps to ECONNREFUSED */
- /* WSAELOOP maps to ELOOP */
- /* WSAENAMETOOLONG maps to ENAMETOOLONG */
- /* WSAEHOSTDOWN is EHOSTDOWN */
- /* WSAEHOSTUNREACH maps to EHOSTUNREACH */
- /* WSAENOTEMPTY maps to ENOTEMPTY */
- /* WSAEPROCLIM is EPROCLIM */
- /* WSAEUSERS is EUSERS */
- /* WSAEDQUOT is EDQUOT */
- /* WSAESTALE is ESTALE */
- /* WSAEREMOTE is EREMOTE */
- case WSASYSNOTREADY:
- return "Network subsystem is unavailable";
- case WSAVERNOTSUPPORTED:
- return "Winsock.dll version out of range";
- case WSANOTINITIALISED:
- return "Successful WSAStartup not yet performed";
- case WSAEDISCON:
- return "Graceful shutdown in progress";
- case WSAENOMORE: case WSA_E_NO_MORE:
- return "No more results";
- case WSAECANCELLED: case WSA_E_CANCELLED:
- return "Call was canceled";
- case WSAEINVALIDPROCTABLE:
- return "Procedure call table is invalid";
- case WSAEINVALIDPROVIDER:
- return "Service provider is invalid";
- case WSAEPROVIDERFAILEDINIT:
- return "Service provider failed to initialize";
- case WSASYSCALLFAILURE:
- return "System call failure";
- case WSASERVICE_NOT_FOUND:
- return "Service not found";
- case WSATYPE_NOT_FOUND:
- return "Class type not found";
- case WSAEREFUSED:
- return "Database query was refused";
- case WSAHOST_NOT_FOUND:
- return "Host not found";
- case WSATRY_AGAIN:
- return "Nonauthoritative host not found";
- case WSANO_RECOVERY:
- return "Nonrecoverable error";
- case WSANO_DATA:
- return "Valid name, no data record of requested type";
- /* WSA_QOS_* omitted */
- # endif
- #endif
- #if GNULIB_defined_ENOMSG
- case ENOMSG:
- return "No message of desired type";
- #endif
- #if GNULIB_defined_EIDRM
- case EIDRM:
- return "Identifier removed";
- #endif
- #if GNULIB_defined_ENOLINK
- case ENOLINK:
- return "Link has been severed";
- #endif
- #if GNULIB_defined_EPROTO
- case EPROTO:
- return "Protocol error";
- #endif
- #if GNULIB_defined_EMULTIHOP
- case EMULTIHOP:
- return "Multihop attempted";
- #endif
- #if GNULIB_defined_EBADMSG
- case EBADMSG:
- return "Bad message";
- #endif
- #if GNULIB_defined_EOVERFLOW
- case EOVERFLOW:
- return "Value too large for defined data type";
- #endif
- #if GNULIB_defined_ENOTSUP
- case ENOTSUP:
- return "Not supported";
- #endif
- #if GNULIB_defined_ENETRESET
- case ENETRESET:
- return "Network dropped connection on reset";
- #endif
- #if GNULIB_defined_ECONNABORTED
- case ECONNABORTED:
- return "Software caused connection abort";
- #endif
- #if GNULIB_defined_ESTALE
- case ESTALE:
- return "Stale NFS file handle";
- #endif
- #if GNULIB_defined_EDQUOT
- case EDQUOT:
- return "Disk quota exceeded";
- #endif
- #if GNULIB_defined_ECANCELED
- case ECANCELED:
- return "Operation canceled";
- #endif
- #if GNULIB_defined_EOWNERDEAD
- case EOWNERDEAD:
- return "Owner died";
- #endif
- #if GNULIB_defined_ENOTRECOVERABLE
- case ENOTRECOVERABLE:
- return "State not recoverable";
- #endif
- #if GNULIB_defined_EILSEQ
- case EILSEQ:
- return "Invalid or incomplete multibyte or wide character";
- #endif
- default:
- return NULL;
- }
- }
|