Home | History | Annotate | Download | only in lib
      1 /* strerror-override.c --- POSIX compatible system error routine
      2 
      3    Copyright (C) 2010-2012 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 /* Written by Bruno Haible <bruno (at) 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 }
    303