Blame gettext-tools/libgettextpo/strerror-override.c

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