Blame lib/strerror-override.c

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