(root)/
m4-1.4.19/
lib/
strerror-override.c
       1  /* strerror-override.c --- POSIX compatible system error routine
       2  
       3     Copyright (C) 2010-2021 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 <https://www.gnu.org/licenses/>.  */
      17  
      18  /* Written by Bruno Haible <bruno@clisp.org>, 2010.  */
      19  
      20  #include <config.h>
      21  
      22  #include "strerror-override.h"
      23  
      24  #include <errno.h>
      25  
      26  #if GNULIB_defined_EWINSOCK /* native Windows platforms */
      27  # if HAVE_WINSOCK2_H
      28  #  include <winsock2.h>
      29  # endif
      30  #endif
      31  
      32  /* If ERRNUM maps to an errno value defined by gnulib, return a string
      33     describing the error.  Otherwise return NULL.  */
      34  const char *
      35  strerror_override (int errnum)
      36  {
      37    /* These error messages are taken from glibc/sysdeps/gnu/errlist.c.  */
      38    switch (errnum)
      39      {
      40  #if REPLACE_STRERROR_0
      41      case 0:
      42        return "Success";
      43  #endif
      44  
      45  #if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */
      46      case EINPROGRESS:
      47        return "Operation now in progress";
      48      case EALREADY:
      49        return "Operation already in progress";
      50      case ENOTSOCK:
      51        return "Socket operation on non-socket";
      52      case EDESTADDRREQ:
      53        return "Destination address required";
      54      case EMSGSIZE:
      55        return "Message too long";
      56      case EPROTOTYPE:
      57        return "Protocol wrong type for socket";
      58      case ENOPROTOOPT:
      59        return "Protocol not available";
      60      case EPROTONOSUPPORT:
      61        return "Protocol not supported";
      62      case EOPNOTSUPP:
      63        return "Operation not supported";
      64      case EAFNOSUPPORT:
      65        return "Address family not supported by protocol";
      66      case EADDRINUSE:
      67        return "Address already in use";
      68      case EADDRNOTAVAIL:
      69        return "Cannot assign requested address";
      70      case ENETDOWN:
      71        return "Network is down";
      72      case ENETUNREACH:
      73        return "Network is unreachable";
      74      case ECONNRESET:
      75        return "Connection reset by peer";
      76      case ENOBUFS:
      77        return "No buffer space available";
      78      case EISCONN:
      79        return "Transport endpoint is already connected";
      80      case ENOTCONN:
      81        return "Transport endpoint is not connected";
      82      case ETIMEDOUT:
      83        return "Connection timed out";
      84      case ECONNREFUSED:
      85        return "Connection refused";
      86      case ELOOP:
      87        return "Too many levels of symbolic links";
      88      case EHOSTUNREACH:
      89        return "No route to host";
      90      case EWOULDBLOCK:
      91        return "Operation would block";
      92  #endif
      93  #if GNULIB_defined_ESTREAMS /* native Windows platforms with older <errno.h> */
      94      case ETXTBSY:
      95        return "Text file busy";
      96      case ENODATA:
      97        return "No data available";
      98      case ENOSR:
      99        return "Out of streams resources";
     100      case ENOSTR:
     101        return "Device not a stream";
     102      case ETIME:
     103        return "Timer expired";
     104      case EOTHER:
     105        return "Other error";
     106  #endif
     107  #if GNULIB_defined_EWINSOCK /* native Windows platforms */
     108      case ESOCKTNOSUPPORT:
     109        return "Socket type not supported";
     110      case EPFNOSUPPORT:
     111        return "Protocol family not supported";
     112      case ESHUTDOWN:
     113        return "Cannot send after transport endpoint shutdown";
     114      case ETOOMANYREFS:
     115        return "Too many references: cannot splice";
     116      case EHOSTDOWN:
     117        return "Host is down";
     118      case EPROCLIM:
     119        return "Too many processes";
     120      case EUSERS:
     121        return "Too many users";
     122      case EDQUOT:
     123        return "Disk quota exceeded";
     124      case ESTALE:
     125        return "Stale NFS file handle";
     126      case EREMOTE:
     127        return "Object is remote";
     128  # if HAVE_WINSOCK2_H
     129        /* WSA_INVALID_HANDLE maps to EBADF */
     130        /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */
     131        /* WSA_INVALID_PARAMETER maps to EINVAL */
     132      case WSA_OPERATION_ABORTED:
     133        return "Overlapped operation aborted";
     134      case WSA_IO_INCOMPLETE:
     135        return "Overlapped I/O event object not in signaled state";
     136      case WSA_IO_PENDING:
     137        return "Overlapped operations will complete later";
     138        /* WSAEINTR maps to EINTR */
     139        /* WSAEBADF maps to EBADF */
     140        /* WSAEACCES maps to EACCES */
     141        /* WSAEFAULT maps to EFAULT */
     142        /* WSAEINVAL maps to EINVAL */
     143        /* WSAEMFILE maps to EMFILE */
     144        /* WSAEWOULDBLOCK maps to EWOULDBLOCK */
     145        /* WSAEINPROGRESS maps to EINPROGRESS */
     146        /* WSAEALREADY maps to EALREADY */
     147        /* WSAENOTSOCK maps to ENOTSOCK */
     148        /* WSAEDESTADDRREQ maps to EDESTADDRREQ */
     149        /* WSAEMSGSIZE maps to EMSGSIZE */
     150        /* WSAEPROTOTYPE maps to EPROTOTYPE */
     151        /* WSAENOPROTOOPT maps to ENOPROTOOPT */
     152        /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */
     153        /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */
     154        /* WSAEOPNOTSUPP maps to EOPNOTSUPP */
     155        /* WSAEPFNOSUPPORT is EPFNOSUPPORT */
     156        /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */
     157        /* WSAEADDRINUSE maps to EADDRINUSE */
     158        /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */
     159        /* WSAENETDOWN maps to ENETDOWN */
     160        /* WSAENETUNREACH maps to ENETUNREACH */
     161        /* WSAENETRESET maps to ENETRESET */
     162        /* WSAECONNABORTED maps to ECONNABORTED */
     163        /* WSAECONNRESET maps to ECONNRESET */
     164        /* WSAENOBUFS maps to ENOBUFS */
     165        /* WSAEISCONN maps to EISCONN */
     166        /* WSAENOTCONN maps to ENOTCONN */
     167        /* WSAESHUTDOWN is ESHUTDOWN */
     168        /* WSAETOOMANYREFS is ETOOMANYREFS */
     169        /* WSAETIMEDOUT maps to ETIMEDOUT */
     170        /* WSAECONNREFUSED maps to ECONNREFUSED */
     171        /* WSAELOOP maps to ELOOP */
     172        /* WSAENAMETOOLONG maps to ENAMETOOLONG */
     173        /* WSAEHOSTDOWN is EHOSTDOWN */
     174        /* WSAEHOSTUNREACH maps to EHOSTUNREACH */
     175        /* WSAENOTEMPTY maps to ENOTEMPTY */
     176        /* WSAEPROCLIM is EPROCLIM */
     177        /* WSAEUSERS is EUSERS */
     178        /* WSAEDQUOT is EDQUOT */
     179        /* WSAESTALE is ESTALE */
     180        /* WSAEREMOTE is EREMOTE */
     181      case WSASYSNOTREADY:
     182        return "Network subsystem is unavailable";
     183      case WSAVERNOTSUPPORTED:
     184        return "Winsock.dll version out of range";
     185      case WSANOTINITIALISED:
     186        return "Successful WSAStartup not yet performed";
     187      case WSAEDISCON:
     188        return "Graceful shutdown in progress";
     189      case WSAENOMORE: case WSA_E_NO_MORE:
     190        return "No more results";
     191      case WSAECANCELLED: case WSA_E_CANCELLED:
     192        return "Call was canceled";
     193      case WSAEINVALIDPROCTABLE:
     194        return "Procedure call table is invalid";
     195      case WSAEINVALIDPROVIDER:
     196        return "Service provider is invalid";
     197      case WSAEPROVIDERFAILEDINIT:
     198        return "Service provider failed to initialize";
     199      case WSASYSCALLFAILURE:
     200        return "System call failure";
     201      case WSASERVICE_NOT_FOUND:
     202        return "Service not found";
     203      case WSATYPE_NOT_FOUND:
     204        return "Class type not found";
     205      case WSAEREFUSED:
     206        return "Database query was refused";
     207      case WSAHOST_NOT_FOUND:
     208        return "Host not found";
     209      case WSATRY_AGAIN:
     210        return "Nonauthoritative host not found";
     211      case WSANO_RECOVERY:
     212        return "Nonrecoverable error";
     213      case WSANO_DATA:
     214        return "Valid name, no data record of requested type";
     215        /* WSA_QOS_* omitted */
     216  # endif
     217  #endif
     218  
     219  #if GNULIB_defined_ENOMSG
     220      case ENOMSG:
     221        return "No message of desired type";
     222  #endif
     223  
     224  #if GNULIB_defined_EIDRM
     225      case EIDRM:
     226        return "Identifier removed";
     227  #endif
     228  
     229  #if GNULIB_defined_ENOLINK
     230      case ENOLINK:
     231        return "Link has been severed";
     232  #endif
     233  
     234  #if GNULIB_defined_EPROTO
     235      case EPROTO:
     236        return "Protocol error";
     237  #endif
     238  
     239  #if GNULIB_defined_EMULTIHOP
     240      case EMULTIHOP:
     241        return "Multihop attempted";
     242  #endif
     243  
     244  #if GNULIB_defined_EBADMSG
     245      case EBADMSG:
     246        return "Bad message";
     247  #endif
     248  
     249  #if GNULIB_defined_EOVERFLOW
     250      case EOVERFLOW:
     251        return "Value too large for defined data type";
     252  #endif
     253  
     254  #if GNULIB_defined_ENOTSUP
     255      case ENOTSUP:
     256        return "Not supported";
     257  #endif
     258  
     259  #if GNULIB_defined_ENETRESET
     260      case ENETRESET:
     261        return "Network dropped connection on reset";
     262  #endif
     263  
     264  #if GNULIB_defined_ECONNABORTED
     265      case ECONNABORTED:
     266        return "Software caused connection abort";
     267  #endif
     268  
     269  #if GNULIB_defined_ESTALE
     270      case ESTALE:
     271        return "Stale NFS file handle";
     272  #endif
     273  
     274  #if GNULIB_defined_EDQUOT
     275      case EDQUOT:
     276        return "Disk quota exceeded";
     277  #endif
     278  
     279  #if GNULIB_defined_ECANCELED
     280      case ECANCELED:
     281        return "Operation canceled";
     282  #endif
     283  
     284  #if GNULIB_defined_EOWNERDEAD
     285      case EOWNERDEAD:
     286        return "Owner died";
     287  #endif
     288  
     289  #if GNULIB_defined_ENOTRECOVERABLE
     290      case ENOTRECOVERABLE:
     291        return "State not recoverable";
     292  #endif
     293  
     294  #if GNULIB_defined_EILSEQ
     295      case EILSEQ:
     296        return "Invalid or incomplete multibyte or wide character";
     297  #endif
     298  
     299      default:
     300        return NULL;
     301      }
     302  }