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